我的标签与{strong> 4英寸屏幕底部的距离为50px
。
现在我想使用约束,以便此标签位于 3.5英寸屏幕的底部30px
。这是否可以使用自动布局和约束?
当我将底部约束设置为30px
时,标签也位于 4英寸屏幕的底部30px
。基本上我想减少对象之间的空间,以便一切都适合 3.5英寸屏幕。
答案 0 :(得分:0)
如果你想要条件约束,你需要手动添加约束(至少是底部约束,但我不建议使用代码和IB来约束)。
为设备添加测试并根据该值设置底部值:
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
CGSize result = [[UIScreen mainScreen] bounds].size;
if(result.height == 480) {
distanceToBottom = 30; // pre-iPhone 5
}
if(result.height == 568) {
distanceToBottom = 50; // iPhone 5
}
}
答案 1 :(得分:0)
如果您真的希望它与屏幕大小成比例,您可以使约束成比例:
// this constraint positions the label at the bottom of its superview
NSLayoutConstraint *bottomConstraint = [NSLayoutConstraint constraintWithItem:label
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:label.superview
attribute:NSLayoutAttributeBottom
multiplier:1
constant:0];
// move it up by 6% of the superview's height
bottomConstraint.constant = -(label.superview.bounds.size.height * .06);
有几点需要注意:
1)在布局视图时,您必须将此约束设置为常量,因此label.superview
具有高度。 updateConstraints
是一个很好的地方。
2)常量是一个固定值,因此如果layout.superview
的界限发生变化(例如旋转),它就不会自动更新。在这种情况下,您需要确保百分比计算再次发生。这样做的最佳位置取决于您的视图布局以及导致其调整大小的原因。
或者,您可以将常量基于窗口高度,如@Handsomeguy所示:
bottomConstraint.constant = -([UIScreen mainScreen].bounds.size.height * .06);
答案 2 :(得分:0)
相当简单的方法是使用"比例"在故事板中。 指定约束,例如,宽度,高度和水平对齐。 对于垂直对齐,这将是您的情况,您使用比例。 这个想法是这样的:"然而屏幕的高度是,将标签的底部固定在超视图的底部并且具有一定的值",并且您不需要计算该值。
使用这些值,我指定标签的底部始终是superview底部的95%(顺便说一下,'底部'是另一种说法'最大Y值在一个框架内,与...相同,' y' +' height')。
记录的'底部'不同设备的标签值为:
"3.5" = 457 (427 + 30)
"4" = 540.5 (510.5 + 30)
"4.7" = 634.5 (604.5 + 30)
"5.5" = 700.3 (670.3 + 30)