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

问题描述 投票:123回答:13

我下载了新的Xcode,在Interface Builder中,我遇到了很多问题,例如:

固定宽度约束可能导致剪辑

它看起来像这样:

enter image description here

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

有建议的解决方案

ios localization interface-builder xcode9-beta
13个回答
156
投票

即使我的应用程序中没有多种语言,我也会收到相同的警告,这让我发现了真正发生的事情。 。 。

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

这可以通过在界面构建器中选择对象,转到尺寸检查器并在那里更改它来完成:

enter image description here


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

enter image description here



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

修复了具有中心约束的前导约束和尾随约束可能导致剪切

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

enter image description here

我有一个标签,@符号设置为前导和尾随按钮,但也将中心与评级标签对齐。一旦我删除了中心对齐约束,警告消失了,但我留下了一组布局不正确的对象。

然后,我辞职了,接受了Stack View。尽管使用起来很烦人,当你正确地获得所有约束和设置时,它会精美地展示并且没有任何警告。


编辑

正如Repose在评论中所写的那样,有时只需添加> = 0将是您所需要的,因为您确保两个元素不重叠。


1
投票

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

这里使用的方法是创建一个具有适当大小约束的UIView,并将UILabel作为子视图嵌入到UIView中。然后在必要时发生截断,我没有得到警告。这适用于UIView /嵌入式UILabel是否在StackView中。

这基本上与Haroldo Gondim的方法相同,但在这里你可以看到它也可以使用或不使用StackView。

下图显示了使用和不使用StackView的方法。 “SpacerName”是包含标签的可变宽度UIView,“SpacerPD”是固定宽度为80的宽度。[颜色不重要;只是在那里显示观点的位置。]

enter image description here


0
投票

正如您在下图中看到的那样,我遇到错误“固定宽度约束可能导致剪辑”,因为虽然我将文本框设置为垂直居中并且我的标签有左边距约束,但我没有定义约束对于与标签相关的文本框,因此XCode提醒我文本框可以剪切(在上面呈现)标签。

enter image description here

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


0
投票

尝试从超级视图边缘使用相同填充的按钮时,我遇到了类似的问题。

Error case

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

My solution


0
投票

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

Size Inspector 修复错误:缺少前导/尾随约束,这可能导致与其他视图重叠

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

在保持控制的同时,通过视图/对象拖动到附近

Contrl + PressClick 添加前导或尾随约束

Leading/Trailing Constraint


55
投票

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

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

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

p.p.s.使用NSMutableAttributedString在单个UILabel或UITextView上使用AutoLayout和attributedString属性更容易创建下图中的标签。该图像仅用于演示目的。

Disrespect Language Direction


27
投票

对于本地化的标签和按钮,此警告是有意义的,您应该提供必要的约束,以便标签不重叠。如果他们现在可能在将来不重叠,那么提供约束也不会有害。

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

在故事板的文档大纲中,单击黄色箭头,然后选择“固定前导”或“固定尾随”,具体取决于文本在屏幕上的位置(左侧或右侧)。这将解决大多数问题。

Xcode screenshot

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

Xcode screenshot


25
投票

使用Labels,你可以设置Lines0Autoshrink属性是Minimum Font Size删除Fixed Width Constraints May Cause Clipping警告,像这样:

enter image description here


12
投票

快速解决方案!

对于UIButton,通过将标题从plain更改为Attributed文本也解决了我的问题: -

enter image description here


4
投票

Swift 4,Xcode 9.1:

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

如果你的superview / s设置正确,你可以尝试通过设置“horizo​​ntal in Container”约束来“解释”你的对象在视图中的正确位置:

enter image description here


4
投票

我知道这个问题已经得到了解答,但我在我的案例中修复此错误的方法是添加“宽高比”属性,然后消除宽度或高度约束,这非常有效,而且工作量更少,我设法保持相同的输出并适应我对不同设备的看法。


2
投票

如果您需要固定宽度约束按钮,只需将宽度约束优先级设置为700


1
投票

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

我可以修复我的Label嵌入View

Editor > Embed In > View

Label我用Top设置BottomLeadingTrailingconstant = 0

constraints

View,我设置了我之前期待的constraints

© www.soinside.com 2019 - 2024. All rights reserved.