如何使用自动布局为 UIView 提供两种尺寸(适用于 iPhone 和 iPad)?

Posted

技术标签:

【中文标题】如何使用自动布局为 UIView 提供两种尺寸(适用于 iPhone 和 iPad)?【英文标题】:how to give two sizes(for iPhone and iPad ) for UIView using auto layout? 【发布时间】:2014-08-21 07:18:44 【问题描述】:

如何通过界面生成器使用自动布局分别为 iPhone 和 iPad 提供视图尺寸(高度或宽度)?

【问题讨论】:

Apple 建议您使用 2 个故事板。一个用于 iPhone,一个用于 iPad 如果您正在使用情节提要,请使用两个情节提要。如果您使用的是 xib,请使用两个 xib。适用于 iPhone 和 iPad 个人 @Raptor 在下一个 iPhone 发布后(如果它的大小不同),我们必须使用 3 个故事板或 3 个 xib,那么自动布局有什么意义? 绝对是两个故事板,它是关于 iPhone 和 iPad 的不同设备,而不是关于 iPhone 版本 在 Xcode 4“summery”选项卡(在“targets”下)存在 iPhone/iPad 部署信息。但在 Xcode 5 中没有这种选项。在 Xcode 5 之前,我认为您的建议是正确的,但在 Xcode 5 下 ..?.. 您可以通过此链接获取更多信息 ***.com/questions/13614043/… 【参考方案1】:

这个问题有点老了,但对于来到这里的每个人来说,答案是:你不会。如果说原因在 2014 年被问到这个问题时还不是很清楚,那么 ios 9 和分屏视图和幻灯片的引入之后就很清楚了。

更具体一点:

不要依赖单独的故事板或UIDevice.current.userInterfaceIdiom。这会告诉您您使用的是 iPhone 还是 iPad,但由于应用现在可以处于拆分视图中,因此它不会为您提供有关可用屏幕空间的任何信息 不要依赖UIScreen.main.bounds - 如果应用处于拆分视图中,屏幕边界可能不等于应用的大小,因此此信息对布局决策毫无用处 不要在视图控制器中盲目依赖self.view.bounds。如果用户将应用程序移动到拆分视图中,您的视图大小可能会随时更改。如果您正在监视边界,则可以使用它(例如,通过覆盖 bounds 并使用 didSet),但我认为几乎总是有更好的方法,如果您不在视图控制器。

苹果recommends using size classes。虽然一开始这似乎有点限制并且需要一些时间来适应,但如今几乎所有的布局决策都可以使用尺寸等级和适当的自动布局来解决。尺寸类的好处在于,如果尺寸类发生变化,例如因为应用程序移动到拆分视图,系统将自动处理删除旧尺寸类的自动布局约束并为新尺寸添加适当的约束类。

【讨论】:

以上是关于如何使用自动布局为 UIView 提供两种尺寸(适用于 iPhone 和 iPad)?的主要内容,如果未能解决你的问题,请参考以下文章

Swift UIView 自动布局和约束

没有内在尺寸的自动布局

如何使用自动布局在 UIScrollView 中为视图高度设置动画?

从 XIB 加载 UIView 大小不正确

如何以编程方式使用自动布局以编程方式添加 UIview?

在 Swift 中,如何使用自动布局为 UIView 设置动画,就像页面滑入一样?