title: NSLayoutConstraint 的妙用(貴金屬)
date: 2015-12-22 12:01:35
categories: iOS
tags: [貴金屬]
作者:秋兒(lvruifei@foxmail.com)
貴金屬項(xiàng)目士复,是第一次使用 storyboard 開發(fā)翩活,以下是初次接觸 NSLayoutConstraint,遇到的問題:
問題1:
用 storyboard 搭建的 UI菠镇,在 tableView 的 header 中的控件的高度是不固定的,條件1下控件高90俏竞,條件2下控件高45,所以就考慮用代碼控制控件的高度堂竟。
在用代碼設(shè)置了控件的高度和 header 的高度后,發(fā)現(xiàn)效果并非如預(yù)期所想出嘹。在 storyboard 里面設(shè)置了90咬崔,在代碼中設(shè)置了45,顯示時還是90垮斯,代碼更改高度沒變化。
<font color=brown>原因:</font>UIButton 的 buttonType
在 storyboard 里面設(shè)置了控件的高度兜蠕,并且添加了約束,其中便有高度的約束曙旭,約束有了,代碼更改控件的高度桂躏,并不會有效果。
<font color=green>解決方案:</font>
NSLayoutConstraint 是可以設(shè)置成屬性的剂习,在 storyboard 中添加控件高度約束的屬性的連線,連接到相對應(yīng)的文件中失仁。在文件中更改該屬性的值猾昆,如下:
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *surplusHeightLayout;
self.surplusHeightLayout.constant = 45;
問題2:
用 storyboard 搭建的 UI陶因,控件之間有分割線垂蜗,UI設(shè)計師設(shè)計的是1像素,所以需要設(shè)置0.5高。但是在Xcode7 的 storyboard 中無法設(shè)置帶有".5"的數(shù)字炉奴。雖然可以像上面的問題的解決方案那樣處理,可以達(dá)到效果暴拄,但是分割線太多,那樣處理工作量太大,還會有很多冗余的代碼辖所。
<font color=green>解決方案:</font>
創(chuàng)建 NSLayoutConstraint 的子類NSLayoutConstraintHairline,在.m 中添加以下代碼:
- (void)awakeFromNib {
[super awakeFromNib];
if (self.constant == 1) {
self.constant = 0.5/[UIScreen mainScreen].scale;
}
}
在 storyboard 中設(shè)置分割線的高為任意值吆视,選中分割線的高的約束酥宴,修改其類型NSLayoutConstraint為創(chuàng)建的NSLayoutConstraintHairline即可達(dá)到目的啦吧。