1. 程式人生 > >iOS知識---針對多個顯示內容空間不定內容長度的顯示問題Content Hugging 和 Content Compression Resistance

iOS知識---針對多個顯示內容空間不定內容長度的顯示問題Content Hugging 和 Content Compression Resistance

       在開發中有的時候回遇到一些比較操蛋的資料長度不定,但是需要用多個lable在同一行顯示的問題,有的內容必須要顯示全,有些則在到達一定長度之後剩餘內容允許以...的形式省略顯示。針對這樣的問題需要藉助Autolayout來完成。為了便利操作可以採用Masonry來進行約束操作。

Content Hugging 和 Content Compression Resistance

這兩個屬性對有intrinsic content size的控制元件(例如button,label)非常重要。通俗的講,具有intrinsic content size的控制元件自己知道(可以計算)自己的大小,例如一個label,當你設定text,font之後,其大小是可以計算到的。關於intrinsic content size官方的解釋:

Custom views typically have content that they display of which the layout system is unaware. Overriding this method allows a custom view to communicate to the layout system what size it would like to be based on its content. This intrinsic size must be independent of the content frame, because there’s no way to dynamically communicate a changed width to the layout system based on a changed height, for example.


好了,瞭解了intrinsic content size的概念之後,下面就重點討論Content Hugging 和 Content Compression Resistance了。

UIView中關於Content Hugging 和 Content Compression Resistance的方法有:

- (void)setContentCompressionResistancePriority:(UILayoutPriority)priority forAxis:(UILayoutConstraintAxis)axis

- (void)setContentHuggingPriority:(

UILayoutPriority)priority forAxis:(UILayoutConstraintAxis)axis

大概的意思就是設定優先順序的。

Hugging priority 確定view有多大的優先順序阻止自己變大。

Compression Resistance priority確定有多大的優先順序阻止自己變小。


 並排兩個label,寬度由內容決定。父級View寬度不夠時,優先顯示左邊label的內容

遇到這種跟內容壓縮、優先順序有關的佈局,就不得不提Autolayout中的兩個重要的屬性“Content Compression Resistance”和“Content Hugging”。

Content Compression Resistance = 不許擠我!

對,這個屬性說白了就是“不許擠我”=。=

這個屬性的優先順序(Priority)越高,越不“容易”被壓縮。也就是說,當整體的空間裝不小所有的View的時候,Content Compression Resistance優先順序越高的,現實的內容越完整。

Content Hugging = 抱緊!

這個屬性的優先順序越高,整個View就要越“抱緊”View裡面的內容。也就是View的大小不會隨著父級View的擴大而擴大。

分析

根據要求,可以將約束分為兩個部分:

  1. 整體空間足夠時,兩個label的寬度由內容決定,也就是說,label的“Content Hugging”優先順序很高,而且沒有固定的Width屬性。

  2. 整體空間不夠時,左邊的label更不容易被壓縮,也就是“Content Compression Resistance”優先順序更高。

重點:

  1. label不設定具體的寬度(width)屬性,寬度由內容決定。

  2. 顯示的優先順序由“Content Compression Resistance”屬性的高低決定。

約束示例圖

2.jpg

關鍵程式碼

關鍵的程式碼如下:(label1是左邊的label,label2是右邊的)

設定位置

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 // label1: 位於左上角 [_label1 mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(_contentView1.mas_top).with.offset(5); make.left.equalTo(_contentView1.mas_left).with.offset(2); // 40高度 make.height.equalTo(@40); }]; // label2: 位於右上角 [_label2 mas_makeConstraints:^(MASConstraintMaker *make) { //左邊貼著label1,間隔2 make.left.equalTo(_label1.mas_right).with.offset(2); //上邊貼著父view,間隔5 make.top.equalTo(_contentView1.mas_top).with.offset(5); //右邊的間隔保持大於等於2,注意是lessThanOrEqual //這裡的“lessThanOrEqualTo”放在從左往右的X軸上考慮會更好理解。 //即:label2的右邊界的X座標值“小於等於”containView的右邊界的X座標值。 make.right.lessThanOrEqualTo(_contentView1.mas_right).with.offset(-2); //只設置高度40 make.height.equalTo(@40); }];

設定內容約束

1 2 3 4 5 6 7 8 9 10 11

相關推薦

iOS知識---針對顯示內容空間不定內容長度顯示問題Content Hugging Content Compression Resistance

       在開發中有的時候回遇到一些比較操蛋的資料長度不定,但是需要用多個lable在同一行顯示的問題,有的內容必須要顯示全,有些則在到達一定長度之後剩餘內容允許以...的形式省略顯示。針對這樣的問題需要藉助Autolayout來完成。為了便利操作可以採用Masonr

jQuery遍歷相同的class,點選顯示隱藏圖示,顯示及隱藏其下的內容

<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=

異常-JDK7針對異常的處理方案

exceptio 問題 .cn itcast exce 可能 ima ice 方式 1 package cn.itcast_02; 2 3 /* 4 * JDK7出現了一個新的異常處理方案: 5 * try{ 6 * 7 *

使用Perl 修改類似文件的內容, 更新大量文件

perl 多個 lis details right mage -s posit col copy#!/usr/bin/perl -w ####################################################################

iOS——中使用Target去管理環境版本

前言 在實際開發中,為了保證所開發的產品能夠儘量完美上線,在上線前會特意測試幾輪,保證所開發的應用沒有問題。但是又能保證測試的一些垃圾資料不影響線上的版本資料,此時就需要區分生產環境了,一般在測試的時候會專門為測試而準備一個測

解決IDEA中專案不在同一視窗下顯示的問題(操作簡單)

今天博主在使用IDEA軟體做練習的時候,想要重新new一個專案,一系列流程走完之後發現new的新專案出來了,但是之前的專案卻不見了,或者在另外一個視窗,這個和eclipse不同,顯示不太符合大家的程式設計習慣,網上搜索了一些資料,找到了解決的辦法,現在分享給大家; 首先,如下圖,我的IDEA

針對Redis key使用事務方式同步修改時引發的問題

  前幾天投產碰到一個問題:多個Redis鍵值在一個事務內一併提交發生異常的問題。 1.問題描述 為實現令牌桶(Token Bucket)流控演算法,引入了兩個Redis鍵值,由於這兩個鍵值需要同時完成修改,因此引入Redis事務提交方式。 兩個Redis key定義如下:

同時呼叫欄目的文章,文章前顯示欄目名稱

 $CATEGORYS應是一個全域性的儲存欄目資訊的變數,在模板中可以通過 <?php echo "<pre>"; print_r($CATEGORYS);echo "<pre>"; ?> 進行檢視。 根據這個特性可以在呼叫文章的前面加上

如何將word文件的內容合併到一個文件 html轉word

 為了看文字檔案的電子書,大家常常要把多個.html檔案一個個拷成一個檔案,非常不方便。怎樣才能象合併文字檔案一樣來合併html檔案呢?我有一個辦法。 1。開啟Word. 2.插入---檔案---按序多選.html檔案--插入。 3。看一下順序對不對,我的word總是第一個和最後一個顛倒,重新貼上

Android TagFlowLayout完全解析 一款針對Tag的佈局(針對條目的單選操作)

目錄(?)[+] 一、概述 本文之前,先提一下關於上篇博文的100多萬訪問量請無視,博文被刷,我也很鬱悶,本來想把那個文章放到草稿箱,結果放不進去,還把日期弄更新了,實屬無奈。 因為本身FlowLayout本身的預期是提供一種新的佈局的方式,但是呢,在實際的開發中

IOS-如何處理網路請求的併發的情況

如何處理多個網路請求的併發的情況 一、概念 1.併發 當有多個執行緒在操作時,如果系統只有一個CPU,則它根本不可能真正同時進行一個以上的執行緒,它只能把CPU執行時間劃分成若干個時間段,再將時間 段分配給各個執行緒執行,在一個時間段的執行緒程式碼執行時

【程式碼筆記】iOS-scrollerView裡tableView加搜尋框

#import "RootViewController.h" #import "customCell.h" @interface RootViewController () @end @implementation RootViewController - (id)initWithNibName:(N

python刪除檔案內的指定內容

import os datapath = r'F:\mine\data' #待處理的檔案存放目錄 files = os.listdir(datapath) for file in files: with open(r'F:\mine\data'+"\\"+f

Masonry控制元件的等間隔排序顯示

多個(2個以上)控制元件的等間隔排序顯示 首先介紹2個函式 /** * axisType 軸線方向 * fixedSpacing 間隔大小 *

關於一個ListView使用item佈局在優化時出現顯示錯亂的解決方案

一個很麻煩的問題,引用兩個或者多個佈局由於使用了ViewHolder和contenView做優化,頁面在複用時出現要顯示的內容錯亂,經過上網查詢和查谷歌官方的原始碼終於解決了這個問題 首先看下谷歌原始碼是怎麼寫的 這個是Adapter.class檔案中的

JS 獲取相同class的html內容

<div> <p class="molecule">30</p> <p class="Denominator">7.5%&

【Android】Android與伺服器互動 POST上傳圖片檔案、文字內容 GET下載圖片

這裡伺服器端採用的是php解析內容 HTTP請求   HTTP 請求方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 這幾種。用於資料互動的最基本方法一般為GET、POST、PUT、DELETE。對

RF合並output文件,並生成新的logreport文件

結果 png 多個 路徑 行合並 保存 rep out ron 合並兩個output文件並生成新的log和report文件命令: rebot -d 合並生成的log和report文件保存路徑 第1個output文件 第2個output文件 通過執行套件層.txt將結

java在線聊天項目1.2版 ——開啟客戶端,分別實現數據庫註冊登錄功能後,成功登陸則登錄框消失,好友列表窗出現

false als blog string def iat ets cat med 登錄框消失語句 dispose(); 好友列表窗出現 使用new FriendsFrame(phone,s); 登陸對話框代碼修改如下: package com.swift.frame;

Nginx反向代理後端Tomcat、Nginx+PHP伺服器(Nginx的代理負載功能)

需求分析:     現有3個二級域名,一個IP地址,要實現將這3個域名通過1個IP地址對外提供web服務,可使用IP+埠的方式對域名進行解析,且互不影響。如: Domain1:www.huangming.org