カスタム ビューをナビゲーション ビューに配置するナビゲーション ベースのアプリケーションがあります。
まず、「ナビゲーション ビュー」のフレームを取得して、カスタム ビューを適切に配置できるようにする方法を知りたいです。
また、ナビゲーション バーを非表示にして、フレーム情報を正しく取得したい場合もあります。( [[UIScreen mainScreen] 境界] ではありません)
第二に、一般的に、スーパービューのフレームにアクセスして、それに応じてビューを配置するにはどうすればよいですか?
次のことを試しましたが、成功しませんでした。
-(void) loadView {
[super loadView];
UIView* myView = [[UIView alloc] initWithFrame: CGRectZero];
self.view = myView;
self.view.frame = self.view.superview.frame;
[myView release];
}
またはlayoutSubviewsでフレームを設定しましたが、layoutSubviewsが呼び出されていないことに気付きました。この特定のビューにサブビューがないためだと思いますか?
ありがとうございました
-編集-
与えられた答えで、view.frameをスーパービューの境界に設定する必要があることがわかりました。
問題は、viewDidLoad 内のスーパービューにアクセスできないことです。
スーパービューはviewWillAppearでは正しく設定されていますが、viewDidLoadでは設定されていません。
pushViewController によってプッシュされたときや self.view
にアクセスしたときなど、viewDidLoad がさまざまな時点で呼び出されることがわかりました。次のコードがあり、viewDidLoad は nil == controller.view.superview から呼び出されます。
if (nil == controller.view.superview) {
CGRect frame = scrollView.frame;
frame.origin.x = frame.size.width * page;
frame.origin.y = 0;
controller.view.frame = frame;
[scrollView addSubview:controller.view];
}
viewDidLoad からスーパービューにアクセスできないため、以前に viewDidLoad で行ったようにビューをレイアウトできません。これはとても不便で、不必要に複雑に思えます。
何か提案はありますか?