iPhone - UIView的sizeThatFits方法的输入参数

时间:2010-10-25 15:48:24

标签: iphone uiview

此方法的签名是:

- (CGSize)sizeThatFits:(CGSize)size

我不明白size参数的用途。 Apple的documentation声称它是“接收器的当前大小”。

但接收器可能知道它的当前大小。那为什么需要传递呢?

当我通过实验传递其他值时,该方法似乎仍然使用接收器的当前大小。

有人可以解释一下吗?这个参数有什么关系吗?

2 个答案:

答案 0 :(得分:26)

首先,这种方法是AppKit遗留(不是负面意义上的)。

是的,任何视图在任何给定时刻都有一些当前大小,并且可以从bounds属性中检索它。但是在布局期间,当最佳尺寸取决于非静态因素时,存在棘手的情况。以文本标签为例。它可以在一条或多条线中流动,并且线的数量可以取决于最大允许宽度。因此,可能的UILabel实现可以从传递给sizeThatFits:的CGSize的宽度派生其边界大小,在这种情况下,该大小不是字面上接收器的当前大小,而是一些期望/限制大小。

因此任何UIView子类都可以实现-sizeThatFits:因为它认为合适(双关语),甚至可以自由地忽略size参数。大多数情况下,当我必须实现此方法时,我会忽略它,因为我可以从视图的内部状态计算它,但在更复杂的情况下,您可能需要使用size参数来暗示布局中的某些限制。 / p>

答案 1 :(得分:0)

接收器的大小不仅仅是您要填充的潜在尺寸。结果是视图认为最适合给定输入size的内容。

默认行为是简单地返回size参数(即,适合默认视图的大小是您给它的大小) - 所以是的,默认情况下此参数很重要。

子类可以使用此方法强制执行width==height之类的约束或其他类似的约束。