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

Posted

技术标签:

【中文标题】在 iOS 中根据设备高度定位视图【英文标题】:Positioning views dependent on device height in iOS 【发布时间】:2015-01-21 11:11:33 【问题描述】:

我正在切换到自动布局,我想相对于设备的高度定位视图。我应该如何设置约束来满足这样的条件。

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

我目前的所有限制:

【问题讨论】:

为您的用户名/密码视图提供底部间距 w.r.t.条款和条件标签。这将解决问题。 @Fishman 你可以在这里找到解决方案***.com/a/37325714/2477632 【参考方案1】:

一个想法可能是将用户名、密码和登录项放在带有 clearBackground 的 uiView 上,然后为该视图及其父视图创建一个约束,并为其创建一个出口。然后,您可以检测您在代码中使用的手机,并在 willLayoutSubviews 中以编程方式修改约束。

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;

毫无疑问,在自动布局中会有更好的方法来做到这一点,但我确实觉得它有点混乱,所以我过去使用过这种方法。

【讨论】:

您什么时候进行此类更新?在 viewDidLoad 中:无论使用什么设备,view.height 始终为 568。在 viewWillLayoutSubviews 中有这样的信息,但是约束的变化不会影响视图。 它肯定会影响视图,如果您更改约束的常量值,它将相应地改变视图。无论如何,以我的经验。不过,我喜欢 Pranav 的回答,设置用户名框的垂直约束,使其优先级低于其他约束。查看他提供的代码,这是一个很好的方法。【参考方案2】:

这是@One Drive 上传的示例项目。以下是各种版本的 iPhone 模拟器上的示例输出...

【讨论】:

【参考方案3】:

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

你可以用另一种方式查看here

【讨论】:

不,我不想居中(它稍微靠近顶部)。这将是最简单的方法。但是假设我想将红色矩形始终放在屏幕高度的 1/3 处? 另一个好方法是创建高度等于屏幕高度 1/3 的空视图。然后将其宽度设置为父视图宽度。设置为此视图纵横比约束后。并将您的视图与表单放在您的空视图下方。根据它的约束,空视图应调整为屏幕高度的 1/3,如果您的表单将位于空视图的下方,则 from 应位于正确的位置。在我的答案中添加了指向教程的链接 如何在子视图与其容器之间添加约束“纵横比”? 您需要将此约束添加到仅查看。

以上是关于在 iOS 中根据设备高度定位视图的主要内容,如果未能解决你的问题,请参考以下文章

在 Xcode 中根据设备的高度使页面可滚动

在约束布局中根据设备宽度设置视图高度

如何限制从顶部定位我的标签,但在隐藏导航栏时不让它移动(因为它会调整视图高度)?

带有桌面站点视图的移动设备上元素的绝对高度和宽度为100%

ios swift - 表格视图单元格动态高度取决于设备

根据内容的 UITextView 高度在 iOS 9 中是错误的