0

让我们检查一下这行代码(实际上只有 1 行改变了任何东西)

PO(self.containerForFormerHeader);
PO(self.containerForFormerHeader.subviews);
[self.containerForFormerHeader sizeToFit];
PO(self.containerForFormerHeader);

结果:

self.containerForFormerHeader: <UIView: 0x8b669c0; frame = (0 75; 320 0); autoresize = W+H; layer = <CALayer: 0x8b5eb30>>
self.containerForFormerHeader.subviews: (
    "<UIImageView: 0xd572210; frame = (0 0; 320 10); autoresize = LM+RM+TM; userInteractionEnabled = NO; layer = <CALayer: 0xd572250>> - shading-top-Table.png"
)
self.containerForFormerHeader: <UIView: 0x8b669c0; frame = (0 75; 320 0); autoresize = W+H; layer = <CALayer: 0x8b5eb30>>

从结果可以看出:

  1. 视图的高度为 0。
  2. 该视图有一个高度为 10 的子视图
  3. 在 sizetofit 之后,没有任何变化。怎么来的?

我可以直接计算框架,但这让我很困扰。

4

1 回答 1

3

当您sizeToFit在视图上调用该方法时,它最终会在sizeThatFits:视图上调用该方法。的默认实现sizeThatFits:返回视图的当前大小。

因此,除非您的自定义视图显式覆盖该sizeThatFits:方法以返回适当的大小以包含其子视图,否则当您调用sizeToFit.

UIView sizeToFit这在和的文档中都有详细说明UIView sizeThatFits:

像 UILabel 这样的类确实实现sizeThatFits:了返回适当的大小。

于 2012-10-24T05:11:54.770 回答