6

ストーリーボードにUIScrollViewを作成し、それをプロパティとしてView Controllerにリンクし、ページ付けを使用していくつかのサブビューを追加しようとしています。ただし、ストーリーボードでディメンションをグラフィカルに設定しても、UIScrollViewのフレームは最終的に0,0,0,0になります。ストーリーボードで既にグラフィカルに指定しているのに、ディメンションをハードコーディングする必要がありますか?

また、関連して、ストーリーボードのサブビューをカスタマイズして、このスクロールビューで使用することはできますか?すでにコントローラー内にない限り、そのようなビューを作成できないようです。コントローラーが1つしかなく、グラフィカルに設定したいビューが複数ある可能性があるので、プログラムで設定せずにこれを行うにはどうすればよいですか?

4

5 に答える 5

16

ストーリーボードを使用すると、 viewDidLayoutSubviewsですべてのビューのサイズを取得できます。viewWillAppearは機能せず、常に(0,0,0,0)を返しました。

于 2013-01-10T19:00:13.183 に答える
3

ストーリーボードでは、コントローラーのアウトレットはviewDidLoadの前に接続されておらず、そのサイズはviewWillAppearまで設定されません。ここを参照してください。

http://cs193p.m2m.at/lecture-8/

コントローラが完全にインスタンス化され、そのアウトレットが接続されるとすぐに、viewDidLoad:が呼び出されます。したがって、これはセットアップコードを配置するのに適した場所です。ただし、コントローラーのサイズはまだ設定されていませんが、viewWillAppear:ビューが画面に表示される直前に呼び出されます。

ですから、エンリコスの提案は正しいと思います。サイズ関連のものをviewWillAppearに入れてみてください。

于 2012-10-15T21:38:23.657 に答える
1

viewWillAppearでスクロールビューにアクセスすると、フレームに実際に正しい番号が表示されることがわかりました。awakeFromNib私は以前にこれを試し、フレームもviewDidLoad取得しました。0,0,0,0

奇妙なことに、ストーリーボードの前では、awakeFromNibで正しいフレームサイズを取得できます。この例は、AppleのサンプルコードPageControlの1つにあります。

したがって、質問に答えるには、viewWillAppear(ストーリーボードでUIScrollViewを作成したと仮定して)からアクセスしてみてください。

于 2012-10-10T02:37:49.697 に答える
0

ビューがまだ設定されていない行にブレークポイントを設定した可能性があります。これを試して:

- (id)initWithCoder:(NSCoder *)coder
{
    self = [super initWithCoder:coder];
    if (self) {
        CGRect frame = self.scrollView.frame;
        NSLog (@"FRAME IS %@", NSStringFromCGRect(frame));
    }
    return self;
}
于 2012-10-10T02:09:58.577 に答える
0

非常に簡単です。ストーリーボード設定で[自動レイアウトの使用]を無効にします。

ストーリーボード設定で[自動レイアウトの使用]を無効にする(赤い長方形)

于 2013-08-09T06:55:41.033 に答える