此方法的签名是:
- (CGSize)sizeThatFits:(CGSize)size
我不明白size参数的用途。 Apple的documentation声称它是“接收器的当前大小”。
但接收器可能知道它的当前大小。那为什么需要传递呢?
当我通过实验传递其他值时,该方法似乎仍然使用接收器的当前大小。
有人可以解释一下吗?这个参数有什么关系吗?
答案 0 :(得分:26)
首先,这种方法是AppKit遗留(不是负面意义上的)。
是的,任何视图在任何给定时刻都有一些当前大小,并且可以从bounds属性中检索它。但是在布局期间,当最佳尺寸取决于非静态因素时,存在棘手的情况。以文本标签为例。它可以在一条或多条线中流动,并且线的数量可以取决于最大允许宽度。因此,可能的UILabel实现可以从传递给sizeThatFits:的CGSize的宽度派生其边界大小,在这种情况下,该大小不是字面上接收器的当前大小,而是一些期望/限制大小。
因此任何UIView子类都可以实现-sizeThatFits:因为它认为合适(双关语),甚至可以自由地忽略size参数。大多数情况下,当我必须实现此方法时,我会忽略它,因为我可以从视图的内部状态计算它,但在更复杂的情况下,您可能需要使用size参数来暗示布局中的某些限制。 / p>
答案 1 :(得分:0)
接收器的大小不仅仅是您要填充的潜在尺寸。结果是视图认为最适合给定输入size
的内容。
默认行为是简单地返回size
参数(即,适合默认视图的大小是您给它的大小) - 所以是的,默认情况下此参数很重要。
子类可以使用此方法强制执行width==height
之类的约束或其他类似的约束。