为什么需要preferredMaxLayoutWidth?

Pär*_*erk 14 uikit ios autolayout

为什么需要preferredMaxLayoutWidth?

UIKit参考

preferredMaxLayoutWidth

多行标签的首选最大宽度(以磅为单位).

应用布局约束时,此属性会影响标签的大小.在布局期间,如果文本超出此属性指定的宽度,则附加文本将流向一个或多个新行,从而增加标签的高度.

注意这个:

如果文本超出此属性指定的宽度,则附加文本将流向一个或多个新行

因此,一个多标签上,如果preferredMaxLayoutWidth没有设置属性,将文本只是去超越boundsUILabel为什么我们希望在我们明确设置为多线的标签上发生这种情况?

这个属性存在的真正原因是什么?它是自动布局的东西吗?请解释一下,我真的很想了解这一点.

Tim*_*Tim 19

您的猜测是正确的 - 它与自动布局有关.当系统需要布置多线标签时,需要知道两个维度:标签的宽度和高度.

有时候,你明确约束一个或两个:你可以说"我希望我的标签宽300点",或者"我希望我的标签恰好高一行".然后,系统可以根据您的约束和标签中的文本找出其他维度.

但是,其他时候,你也没有约束 - 你可能希望标签在可用空间内包装,但如果它没有很多文本则水平缩小,所以你不要限制宽度或者身高正好.在这种情况下,自动布局可能会变得混乱,因为文本并不像许多其他内容那样真正具有"内在大小".例如:

A sentence can be quite long horizontally,

or
it
might
be
skinny
but
tall
Run Code Online (Sandbox Code Playgroud)

这两种布局 - 以及介于两者之间的布局 - 在Auto Layout的眼中同样有效.为了帮助指导它,Apple引入了preferredMaxLayoutWidth包装标签的属性.如果您的标签未明确设置确切的宽度或高度,UIKit将开始在第一行布置文本,直到您达到该布局的首选最大宽度,然后在每个后续行上换行并继续该过程.

如果preferredMaxLayoutWidth未设置,则文本不会超出bounds标签的范围.相反,会发生两件事之一:

  • 标签将变得越来越宽,扩展它frame.size.width以适应文本在一行上,直到它全部呈现,或
  • 标签会截断其文本

实际上,这使得preferredMaxLayoutWidth属性成为一种机制,用于在包装文本时指导自动布局的行为,无需编写一堆动态约束代码来实现相同的效果.这是一个非常方便的快捷方式,特别是当与一些Interface Builder选项结合使用时,可以将最大布局宽度设置为例如First Runtime Layout Width.

希望有助于清理事情!

  • `preferredMaxLayoutWidth`比添加精确宽度约束更少约束*.它增加了包装标签水平缩小的灵活性,如果它们中的文本行少于一行,并且如果文本没有完全填充该宽度的行,它也可能包含短于宽度的单词.这不是一个约束; 它只是一个自动布局助手,可以简化约束系统. (2认同)
  • 嘿@Tim,非常感谢您的回复!我不需要更多的细节:) 请原谅我的无知,但我在 IB Inspector 选项卡、xCode 8、UILabel 对象上搜索了 30 分钟,但找不到这个属性。我错过了什么吗? (2认同)