在iOS中根据设备高度定位视图

在iOS中根据设备高度定位视图,ios,autolayout,Ios,Autolayout,我正在切换到autolayout,我想根据设备的高度来定位视图。我应该如何设置约束以满足此类条件 我对iPhone 5有很好的布局,但对于iPhone 6Plus,我想将“红色”移到“灰色”的位置: 我当前的所有限制: 正如我所见,您希望将表单放在视图的中心。因此,我认为最好的解决方案是将表单元素放在另一个透明视图上,并将centerX对齐约束和centerY对齐约束添加到此视图中 您可以选择另一种方法,一种方法可能是将用户名、密码和登录项放置在具有clearBackground的uiVie

我正在切换到autolayout,我想根据设备的高度来定位视图。我应该如何设置约束以满足此类条件

我对iPhone 5有很好的布局,但对于iPhone 6Plus,我想将“红色”移到“灰色”的位置:

我当前的所有限制:


正如我所见,您希望将表单放在视图的中心。因此,我认为最好的解决方案是将表单元素放在另一个透明视图上,并将centerX对齐约束和centerY对齐约束添加到此视图中


您可以选择另一种方法,一种方法可能是将用户名、密码和登录项放置在具有clearBackground的uiView上,然后为该视图及其superview创建一个约束,并为其创建一个出口。然后,您可以在代码中检测正在使用的电话,并在WillLayoutSubView中以编程方式修改约束

if ((int)[[UIScreen mainScreen] bounds].size.height == 736)
{
    // This is iPhone 6+ screen
    myConstraint.constant = 150;

} else if ((int)[[UIScreen mainScreen] bounds].size.height == 568) {
    // This is iPhone 5s screen
    frameRateLabelHeightConstraint.constant = 100;
}

毫无疑问,在Autolayout中会有更好的方法来实现这一点,但我确实感到有点困惑,所以我过去曾使用过这种方法。

这里是一个上传的示例项目@。以下是不同版本iPhone模拟器的示例输出…

为您的用户名/密码视图提供底部间距w.r.t.条款和条件标签。这将解决问题。@Fishman您可以在这里找到解决方案不,我不想将其居中(它稍微靠近顶部)。这是最简单的方法。但假设我想让红色矩形始终位于屏幕高度的1/3?另一个好方法是创建高度等于屏幕高度1/3的空视图。然后将其宽度设置为“父视图宽度”。设置此视图纵横比约束后。并将带有表单的视图放在空视图下方。根据其限制,空视图应调整为屏幕高度的1/3,如果窗体位于空视图的下方,则from应位于正确的位置。在我的回答中添加了教程的链接如何在子视图及其容器之间添加约束“纵横比”?您需要将此约束添加到“仅视图”。何时进行此类更新?在viewDidLoad中:无论使用何种设备,view.height始终为568。在viewWillLayoutSubviews中,它有这样的信息,但约束的更改不会影响视图。它肯定会影响视图,如果更改约束的常量值,它将相应地更改视图。以我的经验来说。不过,我喜欢Pranav的答案,设置用户名框的垂直约束,使其优先级低于其他约束。看看他提供的代码,这是一个很好的方法。