自动布局 – 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 设备设计自动布局约束?