使用 Xcode 8 的 Interface Builder 中的 Auto Layout 和 Trait Variations 正确设计的 Storyboard 视图在 Simulator 和 De

Posted

技术标签:

【中文标题】使用 Xcode 8 的 Interface Builder 中的 Auto Layout 和 Trait Variations 正确设计的 Storyboard 视图在 Simulator 和 Device 中的大小错误【英文标题】:Storyboard view designed properly with Auto Layout and Trait Variations in Interface Builder of Xcode 8 has wrong size in Simulator and Device 【发布时间】:2017-03-15 20:51:31 【问题描述】:

我在 ios 应用程序上工作了很多年,然后才停下来。在我的新项目中,我决定尝试 Interface Builder 和 Storyboards(Swift 3、Xcode 8.2.1)的新功能。所以我有一个工作应用程序,它对所有受支持的设备都有精确定义的约束,遵循“常规”和“紧凑”宽度/高度范式。一切似乎都奏效了,我喜欢这种方法。

在我决定在 iPhone 模拟器上运行该应用程序以检查布局之前,我正在为 iPad 模拟器完成第一个视图(及其控制器)。事实证明,除了 ONE 视图之外,一切都按预期工作。

此视图具有以下行为:

如果在情节提要画布中(甚至是辅助编辑器,它 顺便说一句,对我来说看起来一样)我选择了“查看为 iPad 9,7”,然后 运行 iPad 模拟器(屏幕大小相同),布局按应有的方式运行。 如果在 Storyboard 画布中我选择了“以 iPhone 5 方式查看”并且 运行 iPhone 5 模拟器,布局按应有的方式运行。 但是,如果我选择“查看为 iPhone 5”并在 iPad 模拟器上运行应用程序或任何其他错误组合,则会发生以下情况:

一旦视图出现(自定义 segue 或默认推送。所有视图都在导航控制器内),它会显示按比例缩小/放大到我在情节提要上选择的预览大小的内容。然后它动画(从左上角缩放)以填充屏幕。例如:如果我选择“查看为 iPhone 5”并在 iPad 上运行,该视图会出现在 iPad 模拟器的左上角,大小与 iPhone 5 相当。然后它会放大以填充具有精确布局的屏幕我要。

应该补充一点,在这个视图中,所有设备的布局看起来都一样,只是按比例缩小/放大。所以它真的只是归结为错误的视图大小。

这一切只发生在我的一个观点上,我都以同样的方式设计和布局(约束)。这种情况每次都会发生,并且会在模拟器和真实设备上发生。

上周我尝试了来自网络的各种建议,但未能找到任何能够帮助我的主题(关于 Stack Overflow)。

我迷路了。我很高兴有任何建议!

谢谢。

【问题讨论】:

听起来像一个 Xcode 错误。您应该向 Apple 报告。 @matt.writes.code 仍然没有来自 Apple 的回复...您确定这可能是 Xcode 错误吗?任何其他想法,可能是什么? 【参考方案1】:

在逐步从我的视图中删除所有内容并构建每一步之后,我发现我的viewDidLoad() 中有一个self.view.layoutIfNeeded(),它位于一个动画块中,为单个子视图设置动画,但由于某种原因导致了上述问题.删除它解决了这个问题。

【讨论】:

以上是关于使用 Xcode 8 的 Interface Builder 中的 Auto Layout 和 Trait Variations 正确设计的 Storyboard 视图在 Simulator 和 De的主要内容,如果未能解决你的问题,请参考以下文章

Interface Builder 中的未知类,从 xcode9 beta5 迁移到 xcode 8.3

Monodevelop 2.8、XCode 3.2.6、Interface Builder:Outlets 和 Actions

使用 Xcode 8 的 Interface Builder 中的 Auto Layout 和 Trait Variations 正确设计的 Storyboard 视图在 Simulator 和 De

将按钮链接到 IBOutlets 时,Xcode 8 Interface Builder 在类名中放置了错误的空格

Interface Builder XCode 8.3 中的布局问题

如何在Xcode的Interface Builder中一次编辑多个约束