前面兩個章節給你們詳細介紹了Content Hugging Priority(抗拉伸優先級)和Content Compression Resistance Priority(抗壓縮優先級), 本文將綜合運用這兩個屬性,來處理一個項目中的實際需求.git
視圖抗拉伸優先級, 值越小,視圖越容易被拉伸,github
視圖抗壓縮優先級, 值越小,視圖越容易被壓縮,框架
我先來看下下面這個效果,在不計算文字寬度和不修改約束的前提下,怎麼經過設置Content Hugging Priority和Content Compression Resistance Priority屬性來實現:ui
效果描述:atom
兩點要求:spa
新建工程,在頁面添加一個view,並添加約束固定位置和大小, 在這個view上添加三個視圖,分別爲:code
1.imageView,用來顯示用戶圖像 2.黃色label,用來顯示用戶暱稱 3.藍色label,用來顯示時間cdn
並添加以下約束:blog
imageView:上0,左0,下0,長寬比1:1
黃色label:上0,左0,下0,
藍色label:上0,左0,下0,右0
黃色label和藍色label都不添加寬度約束,其寬度有文字長度決定
複製代碼
添加完約束後,會報下面錯誤:get
此錯誤的意思是:
下面來添加這兩個約束:
下面咱們來爲黃色label的Content Compression Resistance Priority(抗壓縮優先級)橫向優先級爲749,以下:
修改藍色label的Content Hugging Priority(抗拉伸優先級)橫向優先級爲250,以下:
添加完畢後,咱們右鍵拖線兩個label生成變量, 並起一個定時器, 依次設置黃色label文字爲:
長暱稱這是一個很長的暱稱
長暱稱這是一個很長的暱
長暱稱這是一個很長的
長暱稱這是一個很長
長暱稱這是一個很
長暱稱這是一個
長暱稱這是一
長暱稱這是
長暱稱這
長暱稱
長暱稱這
長暱稱這是
長暱稱這是一
長暱稱這是一個
長暱稱這是一個很
長暱稱這是一個很長
長暱稱這是一個很長的
長暱稱這是一個很長的暱
長暱稱這是一個很長的暱稱
複製代碼
不須要計算文字寬度,不須要修改約束,就達到上圖效果.
代碼以下:
#import "ViewController.h"
static NSString *const NameText = @"長暱稱這是一個很長的暱稱";
static NSInteger changeLength = -1;//記錄單次變化長度
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *nameLab;
@property (weak, nonatomic) IBOutlet UILabel *timeLab;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
_nameLab.text = NameText;//初始值
_timeLab.text = @"一週之前";//初始值
[NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(action) userInfo:nil repeats:YES];
}
-(void)action{
/** 當前暱稱 */
NSString *name = [NameText substringToIndex:_nameLab.text.length+changeLength];
NSLog(@"當前暱稱:\n%@",name);
_nameLab.text = name;//設置暱稱
if(_nameLab.text.length<=3){//最小寬度
changeLength = 1;//加長
}else if(_nameLab.text.length==NameText.length){//最大寬度
changeLength = -1;//減短
}
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
複製代碼
Content Hugging Priority 視圖抗拉伸優先級 值越小,越先被拉伸
Content Compression Resistance 抗壓縮優先級 值越小,越先被壓縮,
這兩個屬性,在UITableViewCell 自動高度上有着普遍運用,下一章節將重點來說,複雜TableViewCell,在不計算子文字高度狀況下,不用第三方TableViewCell自動計算高度框架狀況下,怎麼實現自動高度.