自动布局 – iPhone X/11 设备上的宽度不一致

Posted

技术标签:

【中文标题】自动布局 – iPhone X/11 设备上的宽度不一致【英文标题】:Autolayout – inconsistent width on iPhone X/11 Devices 【发布时间】:2020-06-18 07:17:46 【问题描述】:

假设我有以下限制:

photo.leading == view.leading
photo.top == view.top
photo.bottom == view.bottom
photo.width == view.width / 2

如果 superview 的宽度是 375,你会期望照片的宽度是 187.5 但是,在 iPhone X/11 设备上,我看到的是 187.67。

这一差异导致右侧的滚动视图出现异常。

但同样,在 iPhone 6/7/8 上也能正常工作 - 顺便说一下,它们具有相同的可用宽度 (375)。

可能出了什么问题?

【问题讨论】:

【参考方案1】:

由于小数位四舍五入,您可能会遇到此问题。像素总是 1x 的倍数,不能有 0.5 像素。因此,当尝试将宽度除以 2 时会返回一个十进制值。您可以通过根据您的配置将 leadingAnchor 调整为 -1 或 +1 来克服此问题。

【讨论】:

【参考方案2】:

有点难以说出发生了什么......并且不太清楚你的意思*“导致右侧的滚动视图行为不端”......但是......

您不需要计算宽度。

限制你的CensioImageView 其父视图的顶部、前导和底部 (BookQuestionAndAnswerPageView) 宽度等于其父视图 (BookQuestionAndAnswerPageView) 和 0.5 乘数 约束滚动视图: 追踪到它的超级视图 (BookQuestionAndAnswerPageView) 前导CensioImageView尾随 但是您当前设置了顶部和底部 在滚动视图中约束UIView: 顶部、底部、前导和尾随滚动视图的ContentLayoutGuide 宽度等于滚动视图的FrameLayoutGuide

这应该可以满足您的需求(我认为)。

一旦您开始尝试计算尺寸,如果您不处理 2x 和 3x 显示比例,您可能会遇到麻烦。

【讨论】:

代码已经使用针对父视图的约束编写。见“self.width = superview.width * 0.5”。 好的 - 那么我想你需要详细说明问题所在。

以上是关于自动布局 – iPhone X/11 设备上的宽度不一致的主要内容,如果未能解决你的问题,请参考以下文章

如何仅使用一个情节提要为所有 iPhone 设备设计自动布局约束?

我想将自动布局应用于 UILabel,例如灵活的高度和宽度

在滚动视图中具有相同宽度和高度的三个 UIButton 上的自动布局

Xcode 6 自动布局灵活宽度

iPhone自动布局图像排列问题

每个设备是不是可以有一个布局而不是自动布局?