目錄:
[TOC]
介紹
Auto Layout前身是Cassowary,本質上是通過聯立線性方程組來描述界面元素之間的位置關系,他的厲害之處在于為界面元素建立關系。
本文主要介紹Auto Layout對于界面元素中的内容大小的處理,諸如
UILabel
或者
UIImageView
,日常開發中經常要根據内容的多少來拉伸縮放控件的大小,不論是
UIIamgeView
的Image或者
UILabel
中的Text。
通用
視圖内容的大小可以通過調用視圖的
intrinsicContentSize
(iOS 6.0 後可用)來擷取,他是隸屬于
UIView
的執行個體方法。
UILabel *label = [[UILabel alloc] initWithFrame:CGRectZero];
label.text = @"來自lintingmuse的CSDN部落格";
NSLog(@"%@", NSStringFromCGSize(label.intrinsicContentSize));
你可以通過該方法來獲得
UIButton
、
UILabel
、
UIImageView
的内容未經壓縮或裁減的情況下填充内容所需的最小空間。但是他并不能獲得
UIView
的子視圖的内容大小。當對沒有資料内容的
UIView
的執行個體調用
intrinsicContentSize
時,它将傳回
UIViewNoIntrinsicMetric
。當改變了視圖的内在内容時,需要調用
invalidateIntrinsicContentSize
方法,這樣才能讓Auto Layout下次布局時重新計算大小。
壓縮阻力和内容吸附
壓縮阻力指的是保護内容不被裁減或壓縮的一種方式。壓縮阻力優先級高的視圖能夠保護内容不被裁減或壓縮。
圖a
圖b
圖a和圖b對比展示了壓縮阻力優先級高低對于視圖内容展示的影響。圖a能完整展示内容,而圖b的文字内容被省略。
設定壓縮阻力優先級可以通過在IB中設定:
此處設定的是水準方向的高壓縮阻力優先級
也可以通過代碼來設定:
[label setContentCompressionResistancePriority: forAxis:UILayoutConstraintAxisHorizontal];
預設情況下的壓縮阻力優先級為750,而預設情況下高度和寬度等的限制優先級為1000。而通過調整高度或寬度的限制優先級與壓縮阻力的優先級相配合,也就能完美地解決内容大小動态變化時帶來的問題。
轉載請标明本文連結!