【问题标题】:Equal width constraint + center horizontally constraint not working等宽约束+中心水平约束不起作用
【发布时间】:2018-05-11 23:27:55
【问题描述】:

我只是在带有 Storyboard 的 Interface Builder 中发现了一个奇怪的行为。

如果我将 UIView 设置为:
• 与父视图等宽,乘数 1
• 水平居中到超级视图,乘数 x

然后我希望宽度始终为相同的值,但不,我有 2 种行为:
• x >= 1 => 宽度与超级视图的预期值相同
• x 宽度比父视图大 0.5 像素

我错过了什么吗?

这是故事板的摘录,两个案例都有 2 个视图

  <subviews>
      <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="CtB-in-rfQ">
          <rect key="frame" x="0.0" y="20" width="375" height="267"/>
          <color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
      </view>
      <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="N87-No-JIr">
          <rect key="frame" x="-94" y="400" width="375.5" height="267"/>
          <color key="backgroundColor" white="0.33333333333333331" alpha="1" colorSpace="calibratedWhite"/>
      </view>
  </subviews>

编辑: 如您所见,深灰色视图的宽度等于超级视图 + 中心 X 等于 0.5 x 超级视图的中心 X。
但是
深灰色视图的宽度为 375.5 像素。 x 位置应为 -93.75 像素,向左四舍五入 0.25 像素。所以我想仍然有以 187.5 像素为中心的视图,界面生成器在 0.5 像素大的右侧再添加 0.25 像素。

我期望的是框架更重要,并且当我更改中心 X 约束的乘数时并没有改变。 (这对我来说与宽度无关)。

【问题讨论】:

    标签: ios xcode storyboard interface-builder nslayoutconstraint


    【解决方案1】:

    通过查看约束,我可以看出它们是模棱两可的。子视图仍然需要 X 和 Y 约束才能正常显示。

    您到底想达到什么目的?让我知道。请检查随附的屏幕截图。让我知道你到底想要达到什么目的。

    正确一个: 1. 将宽度设为 0.5 或任何你想要的 2.使用安全视图使其居中 3.设置相应的Y约束。

    【讨论】:

    • 据我了解,如果我将水平中心设置为 0.5,这意味着屏幕的 1/4。在 iPhone 4 尺寸中,375 或 667 是奇数,因此 1/4 将是 0.25 或 0.75 像素。因此 Interface Builder 将其舍入为 0.5 像素,并在左侧和右侧添加 0.25 像素,以使水平中心仍然是视图的中心。但这意味着宽度要大 0.5 像素,因此不符合父视图的等宽。
    猜你喜欢
    • 2015-07-11
    • 1970-01-01
    • 2015-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    相关资源
    最近更新 更多