title: NSLayoutConstraint 的妙用(貴金屬)
date: 2015-12-22 12:01:35
categories: iOS
tags: [貴金屬]
作者:秋兒(lvruifei@foxmail.com)
貴金屬項目,是第一次使用 storyboard 開發,以下是初次接觸 NSLayoutConstraint,遇到的問題:
問題1:
用 storyboard 搭建的 UI,在 tableView 的 header 中的控件的高度是不固定的,條件1下控件高90,條件2下控件高45,所以就考慮用代碼控制控件的高度。
在用代碼設置了控件的高度和 header 的高度后,發現效果并非如預期所想。在 storyboard 里面設置了90,在代碼中設置了45,顯示時還是90,代碼更改高度沒變化。
<font color=brown>原因:</font>UIButton 的 buttonType
在 storyboard 里面設置了控件的高度,并且添加了約束,其中便有高度的約束,約束有了,代碼更改控件的高度,并不會有效果。
<font color=green>解決方案:</font>
NSLayoutConstraint 是可以設置成屬性的,在 storyboard 中添加控件高度約束的屬性的連線,連接到相對應的文件中。在文件中更改該屬性的值,如下:
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *surplusHeightLayout;
self.surplusHeightLayout.constant = 45;
問題2:
用 storyboard 搭建的 UI,控件之間有分割線,UI設計師設計的是1像素,所以需要設置0.5高。但是在Xcode7 的 storyboard 中無法設置帶有".5"的數字。雖然可以像上面的問題的解決方案那樣處理,可以達到效果,但是分割線太多,那樣處理工作量太大,還會有很多冗余的代碼。
<font color=green>解決方案:</font>
創建 NSLayoutConstraint 的子類NSLayoutConstraintHairline,在.m 中添加以下代碼:
- (void)awakeFromNib {
[super awakeFromNib];
if (self.constant == 1) {
self.constant = 0.5/[UIScreen mainScreen].scale;
}
}
在 storyboard 中設置分割線的高為任意值,選中分割線的高的約束,修改其類型NSLayoutConstraint為創建的NSLayoutConstraintHairline即可達到目的。