3.5英寸和4英寸的不同约束

时间:2014-03-30 20:00:42

标签: ios xcode constraints autolayout

我的标签与{strong> 4英寸屏幕底部的距离为50px

现在我想使用约束,以便此标签位于 3.5英寸屏幕的底部30px。这是否可以使用自动布局和约束?

当我将底部约束设置为30px时,标签也位于 4英寸屏幕的底部30px。基本上我想减少对象之间的空间,以便一切都适合 3.5英寸屏幕。

3 个答案:

答案 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)

相当简单的方法是使用"比例"在故事板中。 指定约束,例如,宽度,高度和水平对齐。 对于垂直对齐,这将是您的情况,您使用比例。 这个想法是这样的:"然而屏幕的高度是,将标签的底部固定在超视图的底部并且具有一定的值",并且您不需要计算该值。

Proportion set in storyboard

使用这些值,我指定标签的底部始终是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)