UIScrollViewが持つ2つのサイズについて
Scroll Viewは2個のView Sizeを持っている. たまにその事実を忘れるというか,contentViewの存在を忘れるのでメモ. スクロールビューを窓と窓に表示される風景に例えて書くと...
サイズその1. viewのSize: 窓のサイズ. scrollView.frameで指定する.
サイズその2. content view のSize: 窓に表示される風景そのもののサイズ. scrollView.contentSize で指定する.
UIScrollViewにボタンなどのコントロールを設置する場合は UIViewを一個挟む必要がある. 構造的に以下の様な感じ. UIScrollView > UIView > UIButton etc..
ユーザアクションで画面がスクロールする動作を実装する場合は UIScrollViewを使用するので,仕様策定の時点ではっきりさせる必要がある.
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds]; // サイズその1 scrollView.backgroundColor = [UIColor cyanColor]; UIView *contentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 1000)]; // サイズその2 scrollView.contentSize = contentView.bounds.size; // contentViewにボタンを追加 UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; [btn setTitle:@"Btn" forState:UIControlStateNormal]; btn.frame = CGRectMake(0,0,60,60); [contentView addSubview:btn]; [scrollView addSubview:contentView]; [self.view addSubview:scrollView];
UIButton の追加部分を消して これもスニペットに登録するといいと思う.