【问题标题】:Autolayout – inconsistent width on iPhone X/11 Devices自动布局 – iPhone X/11 设备上的宽度不一致
【发布时间】: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)。

可能出了什么问题?

【问题讨论】:

    标签: ios swift xcode autolayout


    【解决方案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”。
      • 好的 - 那么我想你需要详细说明问题所在。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-27
      相关资源
      最近更新 更多