【问题标题】:How do I position views in Interface Builder for both 3.5” and 4” Retina?如何在 Interface Builder 中定位 3.5” 和 4” Retina 的视图?
【发布时间】:2012-11-11 01:18:37
【问题描述】:

我想定位一个 UIView,使它出现在 3.5” 和 4” Retina 屏幕的中心。做这个的最好方式是什么?如果我关闭所有 Autosizing 条,我希望它与屏幕中心对齐,但这似乎不会发生。

我很高兴使用新的 Autolayout,但我也不知道如何使用它。

【问题讨论】:

    标签: ios xcode interface-builder alignment autolayout


    【解决方案1】:

    为您的 XIB 执行以下步骤,您应该会为您的视图获得正确的大小调整:

    1. 为了无缝兼容 iOS4,首先将顶视图大小设置为 Retina 3.5 大小。

    2. 移除顶视图的尺寸参数并将其设置为“无”。您现在应该有一个大小正确但没有固定设置大小选项的主视图。

    3. 在“尺寸检查器”选项卡下为顶视图启用所有垂直自动调整大小。

    4. 对每个子视图执行以下操作

      • 选择视图并转到尺寸检查器选项卡
      • 选择排列(垂直居中或对齐)
      • 如果您希望它居中,请删除自动调整大小框中的两个对齐标记。如果您希望它“粘性”,请选择其中之一,如果您希望它填充父项,请选择两者。
      • 通过突出显示或取消突出显示垂直的“双尖箭头”来选择是否应相对调整大小
      • 此时确保所有元素都位于 3.5 英寸视图中的预期位置 - 这对于它在 iOS4 上的工作至关重要。
    5. 保存您的更改。通过选择顶视图并选择大小来检查您的自动调整大小是否成功:“Retina 4 Full Screen”。执行此操作时,您的视图应该看起来像您的预期结果。

    6. 撤消 5 中的更改(使 xib 中的视图再次具有 3.5 大小,但 Size 选项设置为“None”,保存并运行您的应用。

    这也适用于 iOS4,因为视图的大小已经针对 Retina 3.5 进行了调整,因此不会对旧屏幕大小使用自动调整大小。

    在某些情况下,不可能为所有元素获得正确的尺寸/位置。在这些情况下,您需要以编程方式更改 4" 屏幕尺寸的视图尺寸位置。

    【讨论】:

    • 抱歉,我今天没有机会尝试这个...我会尽快告诉你我的进展情况,谢谢!我假设此方法关闭了自动布局?
    • 恐怕我被困在第 3 点上。“查看”选项卡在哪里? Size 检查器是所有 Autosizing 参数所在的地方。
    • 我还是投了赞成票,因为您关于为 3.5" 屏幕布置所有内容的观点是这里最重要的一点。但是,将尺寸参数更改为 "none" 似乎对我。我也可以很高兴地在 3.5" 和 4" 尺寸之间切换以检查它是否正常工作。使用旧的 Autosizing 方法调整新 iPhone 5 的参数大小似乎很奇怪!
    • 抱歉回复晚了。是的,我刚刚看到我读错了,它应该是第 3 点中的尺寸检查器。切换到无可能没有效果,除非你可以在 Interface Builder 中更改视图的尺寸。但对我来说,不将其锁定为固定大小是有道理的。我希望你终于让它工作了=)
    【解决方案2】:

    使用自动布局在 IB 的父(容器)视图中居中:

    • 选择您的视图
    • 进入菜单并选择Editor->Align->Horizo​​ntal/Vertical Center in Container 选项

    但是,只有在您支持 iOS 6 及更高版本时才能使用自动布局,如果您针对较早的操作系统版本,则必须使用其他方法(例如,使用 Eric 建议的代码设置居中视图)

    【讨论】:

    • 谢谢!不过我忘了提一件事,我的应用程序适用于 iOS 4 及更高版本。这会好吗?我已将部署目标设置为 4.0,当我将它编译到我的 iOS 6 设备时它不会抱怨...
    • 很遗憾,这不适用于我的 iPhone 4S。它在 iPod touch 5G 上可以正常显示,但是当我查看我的 iPhone(3.5 英寸显示屏)时,视图与屏幕底部对齐。
    • 您必须首先在设计视图时考虑 3.5",然后设置自动调整大小选项以使其正确拉伸到 4"。您可以对其进行测试,使其在 Interface builder 中正常工作。请参阅我的回答,了解我是如何做到的。
    【解决方案3】:

    以下是手动操作的方法(不使用 AutoLayout):

    int screenWidth = [[UIScreen mainScreen] applicationFrame].size.height;
    int screenHeight = [[UIScreen mainScreen] applicationFrame].size.width;
    
    UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(0,0,100,200)];
    [myView setCenter:CGPointMake(screenWidth/2, screenHeight/2)];
    
    [self.view addSubview:myView];
    

    【讨论】:

    • 我知道如何在代码中做到这一点,谢谢,但是因为我有很多 nib 文件,我更愿意在 Interface Builder 中学习如何做到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-02
    • 2012-05-08
    • 2011-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多