【问题标题】:Xcode 11 add new constraints set zero: use set value instead of default / standardXcode 11 添加新的约束集零:使用设置值而不是默认/标准
【发布时间】:2020-04-12 22:59:57
【问题描述】:

我曾经使用自动布局添加新约束来对超级视图/相对视图进行简单的约束,就像这样(很长一段时间):

但是,最近在更新到最新的 xcode(11.3.3 或仅 11.3/11C29)后,我遇到了一个奇怪的问题:当我设置常量 = 0 时,它们总是以一种不需要的方式生成约束,如下所示:

而且默认值似乎是 20,这让我的观点看起来很错误(0 与 20 相比?)

如果我通过像这样编辑约束来解决这个问题:

然后它会再次更正(图像在编辑约束后,在编辑之前显示常量 = Standard)

我什至不知道如何描述这个问题,但是如何修复这个新的add new constraint 以使用我的愿望点而不是标准/默认值?

更新:

这似乎只发生在对 superview 的约束时。不知道如何解决。

2020 年 4 月 1 日更新:

Xcode11.4 修复了这个问题。

【问题讨论】:

  • 这里有同样的问题。我认为这在我更新到 11.3 UPD 时第一次出现:同一个项目在另一台具有相同版本 xcode 的机器上没有这个问题。可能与 IDE 配置有关,也可能是 IDE 本身的错误。
  • 这里有同样的问题。使用 Xcode 11.3 (11C29)。
  • 同期版本 11.3 (11C29)
  • @DmitrijRogov 我以前记得有时(xcode 8,9 或 10),有一个设置可以帮助我们定义 standard 值(所以我们可以设置 10 或 0 而不是 default = 8)但我忘了它现在在哪里。或者他们删除了该功能?
  • 这快把我逼疯了

标签: xcode autolayout interface-builder xcode11 xcode11.3


【解决方案1】:

从 Xcode 11.3.1 开始:

我发现的最简洁和最快的解决方案如下:

只需在约束字段中输入-0。 Xcode 似乎放弃了否定并且行为正确,这比读取0.01 更好。

您可以一次插入所有约束,而无需一次执行一个或稍后再进行编辑。

Xcode displays the values as this

这看起来确实很愚蠢。苹果是否有理由故意让它这样做......?

编辑:这似乎不是每次都有效,这令人沮丧。我刚刚有一个 UIImageView 向 Superview 显示 0,但在视觉上仍处于默认值 (20)。这看起来确实像 IB 的一个错误,因为这种行为完全不合逻辑。

编辑 2:现在似乎已修复 - 唷!

【讨论】:

    【解决方案2】:

    仍然遇到此错误(Xcode 11.3.1)。通过简单地将约束添加为“标准”来修复它,然后单击蓝色约束线并将尺寸检查器下的“常量”设置为 0。

    【讨论】:

      【解决方案3】:

      似乎是一个错误(别忘了向 Apple 提交文件)。这是一个简单的解决方法:

      在“弹出框”中填写数字时,不要输入0,而是输入0.01。这将防止数字神秘地变为“标准”。好的,所以0.01 与0 不一样,但它足够接近以至于你无法区分,至少你以后不必回去更改它。

      编辑 Apple 表示此错误将在 Xcode 11.4 中修复:

      修复了阻止在约束弹出编辑器中输入 0 常量的错误。 (54076090)

      【讨论】:

      • 但第二次将其设置为 0 有效。为什么要为 0.01 烦恼?无论如何,这很烦人。幸好这是一个错误,而不是一个“功能”。
      【解决方案4】:

      这种行为似乎已在 Xcode 11.4 上得到修复:release notes

      修复了阻止在约束中输入 0 常量的错误 弹出编辑器。 (54076090)


      原答案:

      我也发现了这种行为,我尝试将约束 1 逐 1 添加,Xcode 实际上尊重 0 值。

      我的两分钱。

      【讨论】:

      • 是的,我刚刚在发行说明中也注意到了这一点,做得很好。
      【解决方案5】:

      在标准时忽略它。

      添加后单击约束(蓝线)和检查器以约束属性 并将其设置为 0。

      对我有用

      【讨论】:

        【解决方案6】:

        我知道这不是解决方案,但是对于阻止您通过每个约束的临时解决方案,我刚刚发现如果您插入“-0”而不是“0”,您会得到所需的行为,但是您有每次插入一个约束。

        【讨论】:

        • 这实际上是一个不错的选择,在创建约束时添加'-0'将在检查器中为'0',无需去那里更改它们
        【解决方案7】:

        其实这个问题暂时没有办法解决

        但最好的临时解决方案是一一添加零约束。

        【讨论】:

          【解决方案8】:

          虽然@matt 解决方法有效,但我只想补充一点,您可以将其设置为 0.01,然后将其更改为 0,它不会再次更改为标准值。 注意:Xcode 11.3

          【讨论】:

          • 对我来说,当我将其更改回 0 时,它会再次更改为“标准”。 Xcode 11.3.1.
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-04-13
          • 2016-07-08
          • 1970-01-01
          • 2020-03-16
          • 2011-05-17
          相关资源
          最近更新 更多