我下载了新的Xcode,并在Interface Builder中遇到了很多警告,这些警告说:
固定宽度约束可能会导致剪切
看起来像这样:
我确实有几种语言的本地化,并且我理解警告,即使用另一种语言,标签的大小可能会更改,但我的应用程序没有此问题。昨天我在Xcode 8中运行并测试了它,很好。我不想花费数小时来增加毫无意义的新约束。
有什么建议的解决方案吗?
我下载了新的Xcode,并在Interface Builder中遇到了很多警告,这些警告说:
固定宽度约束可能会导致剪切
看起来像这样:
我确实有几种语言的本地化,并且我理解警告,即使用另一种语言,标签的大小可能会更改,但我的应用程序没有此问题。昨天我在Xcode 8中运行并测试了它,很好。我不想花费数小时来增加毫无意义的新约束。
有什么建议的解决方案吗?
Answers:
即使我的应用程序中没有多种语言,我也收到相同的警告,这使我了解了实际情况。。。
这里发生了一些不同的事情。通过将对象间距的宽度从固定宽度更改为大于或等于或小于或等于,我能够使自己的应用程序中的固定宽度警告静音。
这可以通过在界面生成器中选择对象,转到大小检查器并在此处进行更改来完成:
或者,从文档大纲中选择约束,转到大小检查器,然后在此处进行更改:
至于屏幕截图顶部的警告:
具有中心约束的固定前导和尾随约束可能会导致裁剪
这是我自己的应用中的屏幕截图,在其中我得到了完全相同的警告:
我将标签的@符号设置为在按钮的前面和后面,而且还使中心与等级标签对齐。有一次,我去掉了中间对齐约束,报警消失了,但我留下了一个不正确的布局了一组对象。
那时我辞职了,接受了Stack View。使用起来很烦人,当您正确设置所有约束和设置时,它的布局漂亮且没有警告。
编辑
正如Repose在注释中所写,有时需要简单地添加> = 0,因为您要确保两个元素不重叠。
您可以尝试根据每个约束禁用“尊重语言方向”,以使警告静音并查看是否有帮助。选择您的约束并打开“属性/大小检查器”。请参阅所附图片。
如果您不打算将应用程序本地化为其他语言,则此解决方案应该没有任何后备。对于本地化的应用程序,您必须更加注意标签和字体大小。
ps此解决方案适用于iOS。对于macOS,请尝试> =或<=使警告静音。
下图中的pps标签使用NSMutableAttributedString在单个UILabel或UITextView上使用AutoLayout和attributedString属性创建起来容易得多。该图像仅用于演示目的。
对于本地化的标签和按钮,此警告很有意义,您应提供必要的约束,以使标签不会重叠。如果它们现在不重叠,将来可能会出现重叠,因此提供约束不会受到损害。
Xcode可帮助您自动添加以下约束:
在情节提要的文档大纲中,单击黄色箭头,然后根据文本在屏幕上的位置(左或右)选择“固定的前导”或“固定的尾随”。这将解决大多数问题。
如果您对按钮没有任何文本(仅图像)有此问题,请尝试删除可能仍为按钮设置的“默认标题”:
UIButton
到Storyboard
时,default button
标题是button
。
转向Xcode 9时,我遇到了同样的问题,并且发现了一种对某些布局有用的方法。就我而言,我想要一个表头,其中两列(UILabels)具有固定的宽度,另一列具有可变的宽度。无论我如何指定列宽(包括使用大于或等于而不是等于的约束等),我都会不断收到有关可能的剪切的警告。就我而言,如果需要,我希望可变宽度列(UILabel)能够被裁剪。我本可以忽略警告,但不喜欢这样做。
在这里起作用的方法是创建具有适当大小限制的UIView,并将UILabel作为子视图嵌入到UIView中。然后,如有必要,会发生截断,并且我不会收到任何警告。无论UIView /嵌入式UILabel是否在StackView中,此方法都有效。
这基本上与Haroldo Gondim的方法相同,但是在这里您可以看到它在有或没有StackView的情况下也可以使用。
下图显示了使用和不使用StackView的方法。“ SpacerName”是一个可变宽度的UIView,其中包含一个标签,“ SpacerPD”是一个固定宽度为80的UIView。只是在那里显示视图的位置。]
如您在下图中所看到的,我遇到了“固定宽度约束可能导致剪切”的错误,因为尽管我将文本框设置为垂直居中并且标签具有左边界约束,但是我没有定义约束与标签有关的文本框,因此XCode提醒我该文本框可能会裁剪(在上方呈现)标签。
在向文本框添加左约束以始终与标签保持一定距离后,该错误被XCode认为已解决,并且不再受到约束警告的困扰。
解决错误:“固定宽度约束可能导致剪切”和其他本地化需要选择视图/对象,转到“显示尺寸检查器”,找到“宽度约束”,然后将“常量”设置为“更大”或“等于”:
这意味着视图/对象Xcode抱怨,缺少到相邻视图的前导或尾随约束。
按住控件时,将其拖到视图/对象附近