Xcode 9-“固定的宽度约束可能导致剪切”和其他本地化警告


147

我下载了新的Xcode,并在Interface Builder中遇到了很多警告,这些警告说:

固定宽度约束可能会导致剪切

看起来像这样:

在此处输入图片说明

我确实有几种语言的本地化,并且我理解警告,即使用另一种语言,标签的大小可能会更改,但我的应用程序没有此问题。昨天我在Xcode 8中运行并测试了它,很好。我不想花费数小时来增加毫无意义的新约束。

有什么建议的解决方案吗?


我建议您考虑自动调整大小
Dark Innocence

3
同样在这里。在所有语言中都有保证宽度为50pt的按钮。为什么要以此来my污我本应干净的自动布局报告卡?
John Scalo

9
这绝对是一个巨大的问题,令人惊讶的是没有更多的谈论它:O
Fattie

2
即使只有英语本地化,我也会收到此错误。
阴影

6
对于其他人,如果您没有任何本地化,只是希望这些警告消失,则将情节提要板移出Base.iproj文件夹,如下所示:stackoverflow.com/a/45040394/1807644
William T.

Answers:


179

即使我的应用程序中没有多种语言,我也收到相同的警告,这使我了解了实际情况。。。

这里发生了一些不同的事情。通过将对象间距宽度从固定宽度更改为大于或等于小于或等于,我能够使自己的应用程序中的固定宽度警告静音

这可以通过在界面生成器中选择对象,转到大小检查器并在此处进行更改来完成:

在此处输入图片说明


或者,从文档大纲中选择约束,转到大小检查器,然后在此处进行更改:

在此处输入图片说明



至于屏幕截图顶部的警告:

具有中心约束的固定前导和尾随约束可能会导致裁剪

这是我自己的应用中的屏幕截图,在其中我得到了完全相同的警告:

在此处输入图片说明

我将标签的@符号设置为在按钮的前面和后面,而且还使中心与等级标签对齐。有一次,我去掉了中间对齐约束,报警消失了,但我留下了一个不正确的布局了一组对象。

那时我辞职了,接受了Stack View。使用起来很烦人,当您正确设置所有约束和设置时,它的布局漂亮且没有警告。


编辑

正如Repose在注释中所写,有时需要简单地添加> = 0,因为您要确保两个元素不重叠。


2
> = 0可以防止我之前遇到的重叠和固定重叠问题,将Leading / Trailing转换为Right / Left可以解决裁剪错误。结果可能会有所不同。在开始任何软件开发之前,请咨询您的医生。
2017年

@准确地摆姿势。考虑可能出了什么问题,并添加约束以确保不会出问题。
阴影

辞职以在iOS中使用Stack View可能是可以的,但是对于OS X(很抱歉,MacOS),它并不总是一个好的选择。苹果应该知道这一点。UI和UX的概念通常有不同的假设。
乔安妮斯(Joannes)

2
我同意接受UIStackView。这肯定是很痛苦的,我试图在几个约束下做到这一点,我添加了另一个UIStackView并且布局完美。
Templeman15年

1
还有其他选择吗-如果我希望控件为固定宽度怎么办?
甘榜

60

您可以尝试根据每个约束禁用“尊重语言方向”,以使警告静音并查看是否有帮助。选择您的约束并打开“属性/大小检查器”。请参阅所附图片。

如果您不打算将应用程序本地化为其他语言,则此解决方案应该没有任何后备。对于本地化的应用程序,您必须更加注意标签和字体大小。

ps此解决方案适用于iOS。对于macOS,请尝试> =或<=使警告静音。

下图中的pps标签使用NSMutableAttributedString在单个UILabel或UITextView上使用AutoLayout和attributedString属性创建起来容易得多。该图像仅用于演示目的。

不尊重语言方向


1
对于我,修复了“固定的前,后约束与中心约束可能导致剪切”的问题。谢谢!
toddg's

4
如果您尝试过此操作,但似乎没有任何效果,请尝试退出Xcode并重新启动它。那把戏对我有用。
T'Pol

2
它不会让我取消选择此选项。
滑板车

1
完善!这对我有用,不需要更改我的约束,谢谢!
rgkobashi

1
> =约束对我有不良影响,因为各种复杂的优先级方案。我准备将我的Label插入到View中,但是随后找到了解决问题的解决方案!谢谢:)
KerCodex

33

对于本地化的标签和按钮,此警告很有意义,您应提供必要的约束,以使标签不会重叠。如果它们现在不重叠,将来可能会出现重叠,因此提供约束不会受到损害。

Xcode可帮助您自动添加以下约束:

在情节提要的文档大纲中,单击黄色箭头,然后根据文本在屏幕上的位置(左或右)选择“固定的前导”或“固定的尾随”。这将解决大多数问题。

Xcode屏幕截图

如果您对按钮没有任何文本(仅图像)有此问题,请尝试删除可能仍为按钮设置的“默认标题”:

Xcode屏幕截图


4
就我而言,删除默认标题会删除警告。谢谢!
ReinhardMänner'18

注意,当你添加一个UIButtonStoryboard时,default button标题是button
Miguel Tepale

29

使用Labels,您可以设置Linesis 0Autoshrinkproperties是Minimum Font Size删除Fixed Width Constraints May Cause Clipping警告,例如:

在此处输入图片说明


3
是的,您只需
要将

2
将行设置为0会使标签扩展到所需的行数,这可能不是您想要的。
nickdnk

@nickdnk:我知道,如果您为标签固定了高度限制,它将不会扩展。
狮王

20

另一个快速的解决方案!

对于通过将标题从纯文本更改为属性文本的UIButton,也解决了我的问题:

在此处输入图片说明


像魅力一样工作!
工艺

7

我知道这个问题已经得到了回答,但是我要解决此错误的方法是添加“纵横比”属性,然后消除宽度或高度约束,使其工作得很好并且花费更少的精力,并且我设法保持相同的输出,使我的视图适合不同的设备。


4

Swift 4,Xcode 9.1:

关于此问题,我认为您的对象在其 superview 的上下文中不知道它是正确的中心位置,并且通常使用remove,大于或其他前导/处理设置无法正常工作。首先,您必须检查您的超级视图的正确约束。

如果正确设置了超级视图,则可以通过设置“水平放置在容器中”约束来尝试“解释”对象在视图中的正确位置:

在此处输入图片说明


2

如果您需要按钮的固定宽度限制,只需将宽度限制优先级设置为即可700


1

我遇到了同样的问题,但是当我更改为>=它时,会自动将常量设置为0,如果选择60例如,警告会再次出现。所以我陷入了问题。

我能解决我的嵌入LabelView

Editor > Embed In > View

Label我集TopBottomLeadingTrailingconstant = 0

约束

View设置constraints我之前期望的。


1

转向Xcode 9时,我遇到了同样的问题,并且发现了一种对某些布局有用的方法。就我而言,我想要一个表头,其中两列(UILabels)具有固定的宽度,另一列具有可变的宽度。无论我如何指定列宽(包括使用大于或等于而不是等于的约束等),我都会不断收到有关可能的剪切的警告。就我而言,如果需要,我希望可变宽度列(UILabel)能够被裁剪。我本可以忽略警告,但不喜欢这样做。

在这里起作用的方法是创建具有适当大小限制的UIView,并将UILabel作为子视图嵌入到UIView中。然后,如有必要,会发生截断,并且我不会收到任何警告。无论UIView /嵌入式UILabel是否在StackView中,此方法都有效。

这基本上与Haroldo Gondim的方法相同,但是在这里您可以看到它在有或没有StackView的情况下也可以使用。

下图显示了使用和不使用StackView的方法。“ SpacerName”是一个可变宽度的UIView,其中包含一个标签,“ SpacerPD”是一个固定宽度为80的UIView。只是在那里显示视图的位置。]

在此处输入图片说明


0

如您在下图中所看到的,我遇到了“固定宽度约束可能导致剪切”的错误,因为尽管我将文本框设置为垂直居中并且标签具有左边界约束,但是我没有定义约束与标签有关的文本框,因此XCode提醒我该文本框可能会裁剪(在上方呈现)标签。

在此处输入图片说明

在向文本框添加左约束以始终与标签保持一定距离后,该错误被XCode认为已解决,并且不再受到约束警告的困扰。


0

在尝试从超级视图的边缘添加具有相同填充的按钮时,我遇到了类似的问题。

错误情况

我最终对使用了horizontal center约束和equal widths约束super view

我的解决方案


-1

解决错误:“固定宽度约束可能导致剪切”和其他本地化需要选择视图/对象,转到“显示尺寸检查器”,找到“宽度约束”,然后将“常量”设置为“更大”或“等于”:

尺寸检查器

解决错误:缺少前导/尾随约束可能会导致与其他视图重叠

这意味着视图/对象Xcode抱怨,缺少到相邻视图的前导或尾随约束。

按住控件时,将其拖到视图/对象附近

按住+按一下

添加前导或尾随约束

领先/落后约束


如果单击警告三角,Xcode将一键自动为您创建这些。
lensovet19年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.