Xcode 11添加新约束集零:使用集值而不是默认值/标准值

Xcode 11添加新约束集零:使用集值而不是默认值/标准值,xcode,autolayout,interface-builder,xcode11,xcode11.3,Xcode,Autolayout,Interface Builder,Xcode11,Xcode11.3,我曾经使用autolayout添加新约束来对superview/相对视图进行简单约束,如下所示(长期使用): 然而,最近在更新到最新的xcode(11.3.3或11.3/11C29)之后,我遇到了一个奇怪的问题:当我将常量设置为0时,它们总是以不需要的方式生成约束,如下所示: 看起来默认值是20,这让我的观点看起来非常错误(0比20?) 如果我通过如下方式编辑约束来修复此问题: 然后它将再次更正(编辑约束后的图像,编辑前的图像显示常量=标准) 我甚至不知道如何描述这个问题,但是我如何修复这

我曾经使用autolayout添加新约束来对superview/相对视图进行简单约束,如下所示(长期使用):

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

看起来默认值是20,这让我的观点看起来非常错误(0比20?)

如果我通过如下方式编辑约束来修复此问题:

然后它将再次更正(编辑约束后的图像,编辑前的图像显示常量=
标准

我甚至不知道如何描述这个问题,但是我如何修复这个新的
添加新约束
来使用我的期望点而不是标准/默认值

更新:

它似乎只在约束到superview时发生。不知道怎么修

更新日期:2020年4月1日:

Xcode11.4修复了这个问题。

看起来像个bug(别忘了向苹果提交文件)。以下是一个简单的解决方法:

在“popover”中填写数字时,不要键入
0
,而是键入
0.01
。这将防止数字神秘地变为“标准”。好的,
0.01
0
不一样,但它非常接近,以至于你无法区分两者之间的区别,至少你不必回头再更改它

编辑苹果公司表示该漏洞将在Xcode 11.4中修复:

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


当@matt workaround工作时,我只想补充一点,您可以将其设置为0.01,然后将其更改为0,它不会再次更改为标准值。
注意:Xcode 11.3

此行为似乎在Xcode 11.4上得到了修复:

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


原始答复:

我也发现了这种行为,我试着添加1乘1的约束,Xcode实际上遵守了0值


我的两分钱。

同时实际上没有办法解决这个问题


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

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

在符合标准时忽略此问题

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

从Xcode 11.3.1开始,这对我来说是可行的:

我找到的最简洁、最快的解决方案如下:

只需在约束字段中键入
-0
。Xcode似乎丢弃了负片,并且它的行为正确,这比它读取
0.01的所有内容都要好

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

这看起来确实是愚蠢的行为。有没有一个原因,苹果可能会让它这样做故意

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


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

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

这里也有相同的问题。我想这是我第一次更新到11.3 UPD时出现的:同一个项目在另一台使用相同版本xcode的机器上没有这个问题。可能它与IDE配置有关,也可能是IDE本身的一个bug。这里也有同样的问题。使用Xcode 11.3(11C29)。同一版本的11.3(11C29)@DmitrijRogov我有时会回忆到(Xcode 8、9或10),有一个设置可以帮助我们定义
标准值(因此我们可以设置10或0,而不是
默认值=8
),但我忘了它现在在哪里。或者他们删除了该功能?这让我抓狂这实际上是一个不错的选择,在创建约束时添加“-0”将在inspector中为“0”,无需在那里为我更改,当我将其更改回0时,它会再次更改为“标准”。Xcode 11.3.1.是的,我刚刚在发行说明中也注意到了这一点,做得很好。但是第二次将其设置为0是可行的。为什么要用0.01呢?不管怎么说,这很烦人。幸好这是一个bug,而不是一个“特性”。