UIScrollViewを使おうとしている最中ですが、理解していない基本的なことがいくつかあるようです。
IPhoneアプリでUIScrollViewを使用したいとします。 320x700のボタンでいっぱいのビューがあります。明らかに、これは320x480のiPhoneには大きすぎます。したがって、UIScrollViewを使用する必要があることはわかっています。ただし、これはオブジェクトを作成する順序です
これは正しいですか?
これは機能しますが、私には意味がありません。ビューは、すべてのUI要素を追加するキャンバスであると想定されていることがわかります。 iPhoneアプリの「キャンバス」を320x700にし、ボタンなどをこの320x700のキャンバスに配置できるようにしたい。しかし、UIScrollViewのサイズを320x480に戻さないと、UIScrollViewのコンテンツサイズをそのサイズよりも大きく設定する必要があるため、スクロールしません。
しかし、UIScrollViewのサイズを320x480に設定すると、InterfaceBuilderに画面と480から700の間のボタンが表示されません。したがって、すべての編集を行い、すべてのUI要素をUIScrollViewに追加してから、320x480に戻すことになっているようです。
より理にかなっているこれを行う他の方法はありますか?これがどのように機能するかについての理解に欠けているものは何ですか?
私は投稿しました ここに別の解決策 これはもっと簡単で良いと思います。
これを行う別の方法があります。
UIScrollView
を作成します。サイズを画面サイズ(320x460)に設定するか、[シミュレートされたメトリック]の下のステータスバーをオンにします。delegate
アウトレットをファイルの所有者に接続します。view
アウトレットをスクロールビューに設定します。UIView
を作成します。これがコンテンツビューになります。contentView
という名前の強力な(またはARCを使用していない場合は保持する)アウトレットを作成し、コンテンツビューに接続します。ビューコントローラのviewDidLoad
で、次のようにします。
- (void)viewDidLoad {
[super viewDidLoad];
[self.view addSubview:self.contentView];
((UIScrollView *)self.view).contentSize = self.contentView.frame.size;
}
ビューコントローラのviewDidUnload
で、次のようにします。
- (void)viewDidUnload {
self.contentView = nil;
[super viewDidUnload];
}
そうです、ビューはすべてのUI要素を追加するキャンバスです。 Interface Builderは最初はちょっと変わっていますが、慣れることができます。それがまさにその仕組みです。
ScrollViewのサイズを変更する必要があるという事実に行き詰まっています。 ScrollViewにはフレームサイズとコンテンツサイズがあります。構築方法は、コンテンツサイズがフレームサイズよりも大きい場合、スクロールするというものです。内部に入る要素を配置できるように、InterfaceBuilderで必要なだけフレームを大きくする必要があります。アプリケーションを実行するときは、iPhoneの画面解像度内に収まるようにスクロールのフレームのサイズを変更する必要があります。コントロールのフレームを画面より大きくすることは意味がありません。
--------------------------------------------
| | | |
| | | |
| | | |
| | | |
| | |<------------------ iPhone Screen frame
| | | |
| | | |
| | | |
| | | |<------- ScrollView Content size
| | | |
| | | |
| | |<----------------- ScrollView Frame Size
| | | |
| | | |
| | | |
| | | |
| | | |
| ------------------------ |
| |
| |
| |
--------------------------------------------
この表現によって、物事がどのように機能するかが明確になることを願っています。言い換えると、スクロールフレームは、コンテンツを表示できる穴です。全体がコンテンツと同じ大きさの場合は、その必要はありません。あなたがそれをすべて見ることができるcosをスクロールしてください。
理解を深めるために、IBを使用せずにコンポーネントをコードで記述しようとすることもお勧めします。