Xcode 11 添加新的约束条件设为零:使用设置值而非默认/标准值

77

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

enter image description here

然而,最近在更新到最新版本的Xcode(11.3.3或仅为11.3/11C29)后,我遇到了一个奇怪的问题:当我将常数设置为0时,它们总是以不想要的方式生成约束,如下所示:

enter image description here

似乎默认值为20,导致我的视图看起来很奇怪(0与20相比?)

如果我按照以下方式编辑约束条件来解决这个问题:

enter image description here

然后它会再次更正(图像在编辑约束之后,编辑之前显示常量= Standard
我甚至不知道如何描述这个问题,但是如何修复这个新的添加新的约束以使用我的期望点而不是标准/默认?
更新:
似乎只有在约束到父视图时才会发生。不知道如何修复。
更新2020年4月1日:
Xcode11.4修复了此问题。

2
同样的问题在这里。我认为这是在我更新到11.3时第一次出现的。更新:同一个项目在另一台安装了相同版本Xcode的机器上没有这个问题。也许与IDE配置有关,或者可能是IDE本身的一个错误。 - Dmitrij Rogov
1
这里也有同样的问题。使用Xcode 11.3 (11C29)。 - user525504
1
相同问题 版本11.3(11C29) - user832
1
@DmitrijRogov 我记得在以前的Xcode 8、9或10中,有一个设置可以帮助我们定义“标准”值(这样我们就可以设置10或0而不是“默认=8”),但我现在忘记了它在哪里。或者他们可能已经删除了这个功能? - Eddie
6
这让我疯了。 - Buyin Brian
他们确实希望我们使用边距... - Lord Zsolt
8个回答

41

看起来像是一个bug(不要忘记向Apple进行报告)。这里有一个简单的解决方法:

当你在"弹出窗口"中填写数字时,不要输入0,而是输入0.01。这将防止数字神秘地变成"标准"。好吧,0.01虽然不等于0,但它足够接近,你无法区分差别,而且你至少不必回去更改它。

编辑 Apple表示,这个bug将在Xcode 11.4中得到修复:

修复了一个bug,该bug导致无法在约束弹出编辑器中输入0常量。(54076090)


但第二次将其设置为0是有效的。为什么要使用0.01?这很烦人。幸好这是一个bug而不是“功能”。 - Vlad Rusu

12

@matt提供的解决方法可行,我想补充一下,你可以将其设置为0.01,然后将其改回0,这样它就不会再次更改为标准值了。 注意:Xcode 11.3


当我将其改回0时,它会再次变为“标准”。Xcode 11.3.1。 - John Scalo

11
截至Xcode 11.3.1版本:
我发现最简单最快速的解决方法如下:
只需在约束字段中输入-0。 Xcode似乎会丢弃负数,并正确地表现,这比它对所有内容读取0.01要好。
你可以一次插入所有约束条件,而无需一次执行一个或以后进行编辑。 Xcode将值显示为此 看起来确实是非常愚蠢的行为。苹果有可能故意这样做吗?
编辑:这似乎并不总是有效,令人沮丧。我刚刚发现UIImageView向Superview显示0,但视觉上仍处于默认值(20)。这真的像是IB的错误,因为这种行为完全不合逻辑。
编辑2:现在似乎已经修复了-太好了!

9
这个问题似乎在Xcode 11.4中得到了修复:发布说明

已修复一个错误,该错误导致无法在约束弹出编辑器中输入0常量。 (54076090)


原始答案:

我也遇到了这种情况,我尝试逐个添加约束,Xcode实际上尊重0值。

我的两分钱意见。


是的,我也在发布说明中注意到了,干得好。 - matt

5

我知道这并不是一个完美的解决方案,但作为临时措施来防止你去处理每个约束条件,我发现如果你用“-0”代替“0”,你就可以获得所需的行为。但是你每次都需要插入一个约束条件。


这实际上是一个不错的选择,当您创建约束时添加“-0”,则在检查器中将为“0”,无需去那里更改它们。 - busta117

1

目前实际上没有解决这个问题的方法

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


0

仍然遇到这个错误(Xcode 11.3.1)。通过将约束条件设置为“标准”,然后单击蓝色约束线并在大小检查器下设置“常数”为0来修复它。


0

标准化时请忽略此内容。

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

这对我很有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接