天天看點

iOS Auto Layout學習

目錄:

[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下次布局時重新計算大小。

壓縮阻力和内容吸附

壓縮阻力指的是保護内容不被裁減或壓縮的一種方式。壓縮阻力優先級高的視圖能夠保護内容不被裁減或壓縮。

iOS Auto Layout學習

圖a

iOS Auto Layout學習

圖b

圖a和圖b對比展示了壓縮阻力優先級高低對于視圖内容展示的影響。圖a能完整展示内容,而圖b的文字内容被省略。

設定壓縮阻力優先級可以通過在IB中設定:

iOS Auto Layout學習

此處設定的是水準方向的高壓縮阻力優先級

也可以通過代碼來設定:

[label setContentCompressionResistancePriority: forAxis:UILayoutConstraintAxisHorizontal];
           

預設情況下的壓縮阻力優先級為750,而預設情況下高度和寬度等的限制優先級為1000。而通過調整高度或寬度的限制優先級與壓縮阻力的優先級相配合,也就能完美地解決内容大小動态變化時帶來的問題。

轉載請标明本文連結!