u16suzuの blog

日々学んだことのメモブログです。

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 の追加部分を消して これもスニペットに登録するといいと思う.