この次のコード例では、問題self.contentView
の を参照していUIScrollView
ます。
// Scroll to bottom.
CGPoint bottomOffset = CGPointMake(0, self.contentView.contentSize.height -
self.contentView.bounds.size.height);
if (bottomOffset.y >= 0.0)
{
[self.contentView setContentOffset:bottomOffset animated:YES];
}
奇妙なことに、iOS 6 ではこれは完全に正常に動作しますが、iOS 7 ではスクロール ビュー (それcontentSize
よりも垂直方向に大きいがあると仮定frame.size.height
) は、スクロール ビューに追加された一番下のサブビューの一番下までしかスクロールしません。
たとえば、次のケースが当てはまるとします。
self.contentView.frame.size.height == 50.0
self.contentView.contentSize.height == 100.0
aSubView.frame.origin.y == 50.0
aSubView.frame.size.height == 20.0
aSubView
スクロール コードは、が表示されるまでスクロールします。スクロールビュー全体の一番下にあるのではself.contentView.contentOffset.y == 20.0
なく。self.contentView.contentOffset.y == 50.0
これは (もちろん) プログラムによって別のサブビューがself.contentView
(ユーザーの操作を介して) 追加されるまで発生し、その後すべてが自動的に修正されます。
わかりやすくするために、スクロール コードの前後にブレークポイントを設定して、 への変更を測定しますself.contentView.contentOffset
。
その他の楽しい事実として、を削除animated
して直接設定するとcontentOffset
、iOS 7 で期待どおりに動作しますが、アニメーションを維持したいと思います。
注:インターフェイス ビルダーを使用しない