ストーリーボードで初期化されたアプリにスクロール ビューがあり、フレームを変更しようとしています。すべてが機能しているように見えますが、フレームとコンテンツのサイズが設定された直後にアクセスされた場合、メソッドが戻った後、それらは異なります! コードは次のとおりです。
CGFloat inputHeight = inputView.frame.size.height;
originalContentHeight = self.scrollableContentView.frame.size.height;
NSLog(@"%f", self.scrollableContentView.frame.size.height-inputHeight);
[self.scrollableContentView setFrame:CGRectMake(self.scrollableContentView.frame.origin.x, self.scrollableContentView.frame.origin.y, self.scrollableContentView.frame.size.width, self.scrollableContentView.frame.size.height-inputHeight)];
NSLog(@"%f", self.scrollableContentView.frame.size.height);
NSLog(@"%@", self.scrollableContentView);
これらのログの出力はすべて予想どおりです。つまり、次のとおりです。
<UIScrollView: 0x808de00; frame = (0 0; 320 81); ... >
ただし、別のメソッドにブレークポイントを設定すると、それが呼び出されるまでに、scrollView をログに記録すると次のようになります。
<UIScrollView: 0x808de00; frame = (0 0; 320 416); ... >
さらに、コンテンツのサイズは次のように変更されます。
(width=320, height=416)
に
(width=320, height=504)
両方の値は、ビューが最初にレイアウトされたときの値に自動的に戻っているようです。スクロール ビューの getter と setter にブレークポイントを設定しましたが、予期しないアクセスが見つからないため、変更は内部的に行う必要があると結論付けました。これは正当な結論ですか?何がうまくいかないのですか?