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 に答える