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

时间:2017-07-15 21:01:18

标签: ios localization interface-builder xcode9-beta

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

  

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

看起来像这样:

enter image description here

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

任何建议的解决方案?

13 个答案:

答案 0 :(得分:150)

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

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

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

enter image description here

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

enter image description here

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

  

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

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

enter image description here

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

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

修改

由于休息在评论中写入,有时只需添加> = 0即可,因为您确保两个元素不重叠。

答案 1 :(得分:54)

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

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

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

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

Disrespect Language Direction

答案 2 :(得分:27)

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

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

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

Image

如果您的按钮没有任何文字(仅限图片)存在此问题,请尝试删除"默认标题"可能仍然为按钮设置:

Image

答案 3 :(得分:25)

使用Labels,您可以设置Lines 0Autoshrink属性Minimum Font Size来删除Fixed Width Constraints May Cause Clipping警告,如下所示:< / p>

enter image description here

答案 4 :(得分:12)

Another quick solution !

For a UIButton by changing the title from plain to Attributed text also resolved my issue:-

enter image description here

答案 5 :(得分:4)

我知道这个问题已经得到解答,但我在我的案例中修复此错误的方法是添加“宽高比”属性,然后消除宽度或高度限制,这非常有效,而且功能较少,而且我设法保持相同的输出并调整我对不同设备的视图。

答案 6 :(得分:3)

Swift 4,Xcode 9.1:

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

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

enter image description here

答案 7 :(得分:1)

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

我可以修复将Label嵌入View

Editor > Embed In > View

Label我设置TopBottomLeadingTrailing constant = 0

constraints

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

答案 8 :(得分:1)

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

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

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

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

enter image description here

答案 9 :(得分:0)

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

enter image description here

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

答案 10 :(得分:0)

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

Error case

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

My solution

答案 11 :(得分:0)

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

Size Inspector

要纠正错误:缺少前导/尾随约束,可能导致与其他视图重叠

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

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

Contrl + PressClick

添加前导约束或尾随约束

Leading/Trailing Constraint

答案 12 :(得分:0)

If you need fixed width constraint for button just set width constraint priority to 700.