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のサブクラスをつくってあげる必要がある)