UIScrollViewの子ビューの数がなぜか「2」な話
UIScrollViewにたくさんの画像を表示するといったことをやっていて、ふと疑問に思ったことがありました。それはUIScrollViewの子ビューに、自分が追加した覚えのないものが含まれていることです。
つまり、InterfaceBuilderにて配置したUIScrollViewクラスのインスタンス"scrollViewTest"というものがあったとして、まだaddSubViewもなにもしていない状態で
NSLog(@"count:%d", [[scrollViewTestsubviews] count]);
これで出力されるログはなんと「2」になる。
結論からいうとこれら2つは「縦横それぞれのスクロールインジケータ」であり、UIScrollView内のビューをすべて削除してしまうと、これらのインジケータも削除してしまうことになるため注意が必要だ。
これら2つのインジケータは正確には、
verticalScrollIndicator
horizontalScrollIndicator
という名前のUIImageViewを型にもつ変数であるため、UIScrollView内のビューをすべて削除するには私は以下のように書いている。
for (UIView* view in [scrollViewTest subviews])
{
if (![view isMemberOfClass:[UIImageViewclass]])
{
[view removeFromSuperview];
}
}
(ただしUIScrollViewに追加するものがUIImageViewのときは、UIImageViewのサブクラスをつくってあげる必要がある)