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

Wil*_*sch 28 iphone uiview

这种方法的签名是:

- (CGSize)sizeThatFits:(CGSize)size
Run Code Online (Sandbox Code Playgroud)

我不明白size参数的用途.Apple的文档声明它是"接收器的当前大小".

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

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

谁能解释一下?这个参数有什么关系吗?

Cos*_*que 26

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

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

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

  • 换句话说,当文档说参数是接收者的大小时,文档是错误的,实际上父母希望孩子使用它的大小?我当然以这种方式编写代码,但我想确认这是不是你的意思. (2认同)
  • 有一点可以肯定,`sizeToFit`的默认实现调用`sizeThatFits:`,传递`self.bounds.size`. (2认同)