iOS Auto Layout intrinsicContentSize 內容大小
阿新 • • 發佈:2019-01-03
intrinsicContentSize 內在內容大小
使用AutoLayout 時,檢視內容的大小通過每個檢視的 intrinsicContentSize 屬性表達,它描述了在資料未經壓縮或剪裁的情況下表達檢視全部內容所需的最小空間。該屬性源於每個檢視所呈現內容的自然屬性。
對於影象檢視,內在內容大小與其呈現的影象大小相符。影象越大,需要的內容大小也越大。
對於按鈕,內在內容的大小隨著按鈕的名稱而變化(title)。
通過檢視的內在內容大小,Auto Layout將檢視框架儘可能地與其自然內容相匹配。無歧義的佈局通常需要給每個座標軸設定兩個屬性,當檢視有一個內在內容大小時,則只需設定兩個屬性中的一個。
當改變了檢視的內在內容時,需要呼叫 invalidateIntrinsicContentSize 方法,讓AutoLayout 知道在下次佈局時重新計算。
例子1:
#import "XJYLabel.h"
@implementation XJYLabel
- (instancetype)init {
if (self = [super init]) {
}
return self;
}
- (CGSize)intrinsicContentSize {
return CGSizeMake(100, 100);
}
@end
例子2:
#pragma mark - Layout
// 如果原有的檢視尺寸和現在的不相符,
- (void)layoutSubviews {
[super layoutSubviews];
_collectionView.frame = self.bounds;
if (!CGSizeEqualToSize(self.bounds.size, [self intrinsicContentSize])) {
[self invalidateIntrinsicContentSize];
}
}
- (CGSize)intrinsicContentSize {
return _layout.collectionViewContentSize ;
}
#pragma mark - Public methods
- (void)reload {
[_collectionView reloadData];
[self invalidateIntrinsicContentSize];
}