NSLayoutConstraint
屏幕兼容的問題
為了讓我們的應用在不容尺寸的屏幕下都能 “正常”的表示,我們盡量不要把數據寫死。
大多數可視元素都是一個矩形區域,當然這個矩形區域有坐標的,我們有了這個區域坐標就能確定可視元素的現實位置了。
但是iphone5 和以前的屏幕不一樣了,在以前的設備中,我們可以添加一個 xx.@2x.png 來適應retina屏幕,但是iphoen5咋辦呢?
ios 引入了 Auto Layout 的東東,這個要和UIViewAutoresizing 區分下。
看下面代碼
- (void)viewDidLoad
{
??? [super viewDidLoad];
?????? ?
??? UIView *aView = [[UIView alloc] init];
??? aView.backgroundColor = [UIColor redColor];
//為了不和autosizing沖突,我們設置No
??? [aView setTranslatesAutoresizingMaskIntoConstraints:NO];
??? [self.view addSubview:aView];
?? ?
??? UIView *bView = [[UIView alloc] init];
??? bView.backgroundColor = [UIColor blueColor];
??? [bView setTranslatesAutoresizingMaskIntoConstraints:NO];
??? [self.view addSubview:bView];
?? ?
??? NSDictionary *views = NSDictionaryOfVariableBindings(aView, bView);
//NSDictionaryOfVariableBindings? 宏? 其實 NSDictionaryOfVariableBindings(v1, v2, v3) 等效于 [NSDictionary dictionaryWithObjectsAndKeys:v1, @"v1", v2, @"v2", v3, @"v3", nil];????
??? [self.view addConstraints:
??? [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(>=50)-[aView(100)]"
???????????????????????????????????????????? options:0
???????????????????????????????????????????? metrics:nil
?????????????????????????????????????????????? views:views]];
?? ?
??? [self.view addConstraints:
???? [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(>=100)-[aView(50)]"
???????????????????????????????????????????? options:0
???????????????????????????????????????????? metrics:nil
?????????????????????????????????????????????? views:views]];
? ?
??? [self.view addConstraints:
???? [NSLayoutConstraint constraintsWithVisualFormat:@"H:[bView(==aView)]"
???????????????????????????????????????????? options:0
???????????????????????????????????????????? metrics:nil
?????????????????????????????????????????????? views:views]];
??? [self.view addConstraints:
???? [NSLayoutConstraint constraintsWithVisualFormat:@"V:[bView(==aView)]"
???????????????????????????????????????????? options:0
???????????????????????????????????????????? metrics:nil
?????????????????????????????????????????????? views:views]];
?? ?
??? [self.view addConstraint:
???? [NSLayoutConstraint constraintWithItem:bView
????????????????????????????????? attribute:NSLayoutAttributeLeft
????????????????????????????????? relatedBy:NSLayoutRelationEqual
???????????????????????????????????? toItem:aView
????????????????????????????????? attribute:NSLayoutAttributeRight
???????????????????????????????? multiplier:1
?????????????????????????????????? constant:10]];
??? //添加一個限制? 等效于 bView.frame.origin.x? = (aView.frame.origin.x +aView.frame.size.width)? * 1? + 10,好像是這樣的!個人覺得!
? 它是一種依賴關系,bView依賴aView,這樣就算aView變了,bView也會跟著變換。
??? [self.view addConstraint:
???? [NSLayoutConstraint constraintWithItem:bView
????????????????????????????????? attribute:NSLayoutAttributeTop
????????????????????????????????? relatedBy:NSLayoutRelationEqual
???????????????????????????????????? toItem:aView
????????????????????????????????? attribute:NSLayoutAttributeTop
???????????????????????????????? multiplier:1
?????????????????????????????????? constant:0]];
?? ?
??? [aView release];
??? [bView release];
}
?
?
?
constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:
?
Create a constraint of the form "view1.attr1 <relation> view2.attr2 * multiplier + constant".
屬性
typedef NS_ENUM(NSInteger, NSLayoutAttribute) {
??? NSLayoutAttributeLeft = 1,
??? NSLayoutAttributeRight,
??? NSLayoutAttributeTop,
??? NSLayoutAttributeBottom,
??? NSLayoutAttributeLeading,
??? NSLayoutAttributeTrailing,
??? NSLayoutAttributeWidth,
??? NSLayoutAttributeHeight,
??? NSLayoutAttributeCenterX,
??? NSLayoutAttributeCenterY,
??? NSLayoutAttributeBaseline,
?? ?
??? NSLayoutAttributeNotAnAttribute = 0
};
關系
typedef NS_ENUM(NSInteger, NSLayoutRelation) {
??? NSLayoutRelationLessThanOrEqual = -1,
??? NSLayoutRelationEqual = 0,
??? NSLayoutRelationGreaterThanOrEqual = 1,
};
最后的結果就是 “view1.attr1? < ?? ?? >= ?? 或者 == ? 或者 ?? <= ? ? ? >? view2.attr2 * multiplier + constant”
轉載于:https://www.cnblogs.com/DamonTang/p/3570743.html
總結
以上是生活随笔為你收集整理的NSLayoutConstraint的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CalledFromWrongThrea
- 下一篇: sharepoint指定的人可以看到列表