web-dev-qa-db-ja.com

InterfaceBuilderでUIScrollViewを作成する手順

UIScrollViewを使おうとしている最中ですが、理解していない基本的なことがいくつかあるようです。

IPhoneアプリでUIScrollViewを使用したいとします。 320x700のボタンでいっぱいのビューがあります。明らかに、これは320x480のiPhoneには大きすぎます。したがって、UIScrollViewを使用する必要があることはわかっています。ただし、これはオブジェクトを作成する順序です

  1. 「表示」のサイズとして320x700のUIScrollViewを作成します
  2. このスクロールビューにすべてのボタンなどを配置します
  3. ViewDidLoadで、contentSizeを320x700に設定します
  4. UIScrollViewのデリゲートをファイル所有者に設定し、FileOwnerのビューをUIScrollViewに設定します
  5. ビューのサイズを320x480にリセットします。

これは正しいですか?

これは機能しますが、私には意味がありません。ビューは、すべてのUI要素を追加するキャンバスであると想定されていることがわかります。 iPhoneアプリの「キャンバス」を320x700にし、ボタンなどをこの320x700のキャンバスに配置できるようにしたい。しかし、UIScrollViewのサイズを320x480に戻さないと、UIScrollViewのコンテンツサイズをそのサイズよりも大きく設定する必要があるため、スクロールしません。

しかし、UIScrollViewのサイズを320x480に設定すると、InterfaceBuilderに画面と480から700の間のボタンが表示されません。したがって、すべての編集を行い、すべてのUI要素をUIScrollViewに追加してから、320x480に戻すことになっているようです。

より理にかなっているこれを行う他の方法はありますか?これがどのように機能するかについての理解に欠けているものは何ですか?

13
steve8918

更新

私は投稿しました ここに別の解決策 これはもっと簡単で良いと思います。

元の

これを行う別の方法があります。

  1. ファイルの所有者プレースホルダーのカスタムクラスをビューコントローラーサブクラスに設定します。
  2. ペン先のトップレベルオブジェクトとしてUIScrollViewを作成します。サイズを画面サイズ(320x460)に設定するか、[シミュレートされたメトリック]の下のステータスバーをオンにします。
  3. スクロールビューのdelegateアウトレットをファイルの所有者に接続します。
  4. ファイルの所有者のviewアウトレットをスクロールビューに設定します。
  5. ニブにanotherトップレベルオブジェクトとしてUIViewを作成します。これがコンテンツビューになります。
  6. コンテンツビューのサイズを320x700に設定します。
  7. ビューコントローラ(ファイルの所有者)にcontentViewという名前の強力な(またはARCを使用していない場合は保持する)アウトレットを作成し、コンテンツビューに接続します。
  8. ボタンをコンテンツビューに配置します。
  9. ビューコントローラのviewDidLoadで、次のようにします。

    - (void)viewDidLoad {
        [super viewDidLoad];
        [self.view addSubview:self.contentView];
        ((UIScrollView *)self.view).contentSize = self.contentView.frame.size;
    }
    
  10. ビューコントローラのviewDidUnloadで、次のようにします。

    - (void)viewDidUnload {
        self.contentView = nil;
        [super viewDidUnload];
    }
    

scrollbuttons project window
フルサイズ

43
rob mayoff

そうです、ビューはすべてのUI要素を追加するキャンバスです。 Interface Builderは最初はちょっと変わっていますが、慣れることができます。それがまさにその仕組みです。

ScrollViewのサイズを変更する必要があるという事実に行き詰まっています。 ScrollViewにはフレームサイズとコンテンツサイズがあります。構築方法は、コンテンツサイズがフレームサイズよりも大きい場合、スクロールするというものです。内部に入る要素を配置できるように、InterfaceBuilderで必要なだけフレームを大きくする必要があります。アプリケーションを実行するときは、iPhoneの画面解像度内に収まるようにスクロールのフレームのサイズを変更する必要があります。コントロールのフレームを画面より大きくすることは意味がありません。

--------------------------------------------
|         |                      |         |
|         |                      |         |
|         |                      |         |
|         |                      |         |
|         |                      |<------------------ iPhone Screen frame
|         |                      |         |
|         |                      |         |
|         |                      |         |
|         |                      |         |<------- ScrollView Content size
|         |                      |         |
|         |                      |         |
|         |                      |<----------------- ScrollView Frame Size
|         |                      |         |
|         |                      |         |      
|         |                      |         |
|         |                      |         |
|         |                      |         |
|         ------------------------         |
|                                          |
|                                          |
|                                          |
--------------------------------------------

この表現によって、物事がどのように機能するかが明確になることを願っています。言い換えると、スクロールフレームは、コンテンツを表示できる穴です。全体がコンテンツと同じ大きさの場合は、その必要はありません。あなたがそれをすべて見ることができるcosをスクロールしてください。

理解を深めるために、IBを使用せずにコンポーネントをコードで記述しようとすることもお勧めします。

5
Alex Stanciu