为啥 iPhone XR/Xs Max 不遵守比率约束?

Posted

技术标签:

【中文标题】为啥 iPhone XR/Xs Max 不遵守比率约束?【英文标题】:Why is ratio constraint not respected on iPhone XR/Xs Max?为什么 iPhone XR/Xs Max 不遵守比率约束? 【发布时间】:2019-06-19 17:50:36 【问题描述】:

我有一个小的UIImageView 用于显示用户的个人资料照片。这在 iPhone 6S 上看起来不错,但是当我在 iPhone XR 上运行它时,图像会缩小到屏幕上的一个小点。我试过不同型号的模拟器,这个问题只出现在XR/Xs Max模拟器上。

最后,我发现了问题:我对这个UIImageView有2个约束:一个32点的宽度约束和一个1的比率约束。当我删除比率约束并添加一个32点的高度约束,一切正常。

我想知道是什么原因导致 iPhone XR/Xs Max 无法遵守比率约束?新模型是否不再支持比率约束?

模拟器都运行 ios 12.2。

--编辑--

另一个仅在 XR/Xs Max 上的 UI 布局问题,与比例无关。我将 UIImageView 放入容器视图中,并将其框架设置为:

imageView.frame = self.containerView.bounds
imageView.contentMode = .scaleAspectFit

imageView 在所有其他模型上看起来都很好,填充了 containerView。但是在XR/XsMax上,右下角有边距:

我在这里错过了什么?

【问题讨论】:

【参考方案1】:

最后,我发现了问题:我对这个 UIImageView 有 2 个约束:一个 32 点的宽度约束和一个 1 的比率约束。

确实有效。您很可能错误地配置了纵横比约束。

imageView.frame = self.containerView.bounds

这里,一切都取决于何时你说这句话。如果你说得太早,比如viewDidLoadcontainerView 本身还没有真正的bounds,所以你会得到错误的结果。这就是为什么使用约束要好得多的原因。使用约束,您可以保证图像视图将适合其父视图。

所以回到使用约束,正确配置纵横比,一切都会好起来的。

【讨论】:

关于您的第一条评论,我已设置约束以相对于其他视图定位视图。我说的是它的大小限制。 这很好,但如果没有看到真正的限制是什么,我无法知道这一点。您需要提供最少的可验证可重现代码。我无法知道您在实际显示的代码之外在做什么。如果您真的需要很好的帮助,请显示足够的代码。就目前而言,我所知道的是您错了,即尊重比率约束受到。所以告诉我你的约束,我会告诉你它们有什么问题。 谢谢!关于第二个问题,我听从了您的建议,并尝试了约束而不是界限。现在看起来不错。我仍然不明白为什么该代码适用于其他模型,也许 XR 使用不同的代码逻辑...关于第一个问题,似乎我在约束字段中输入了数字 1,而不是从下拉菜单中选择“1:1”下来,我改变了,现在宽度+比率约束按预期工作。 好的,我会改变我的答案(有点作弊,但我们最好以一种好的方式帮助未来的读者)。

以上是关于为啥 iPhone XR/Xs Max 不遵守比率约束?的主要内容,如果未能解决你的问题,请参考以下文章

iPhone XR / XS / XS Max CSS 媒体查询

iOS App Icon启动图尺寸配置适配iPhone XS XR XS Max等

为什么iPhone XR,XS和XS Max不会将环境图像应用到ARKit中的场景?

iPhone XR/XS:AVAssetExportSession 状态失败并出现错误

为啥桌面视图与 iPhone X~iPhone XS Max 的大小不同?

苹果(iphone)修改手机定位