iPhone:UINavigationControllerの上部にある奇妙なスペース
-
22-07-2019 - |
質問
iPhoneアプリケーションにUINavigationControllerを追加すると、奇妙な問題が発生します。次のようにコントローラーを追加します。
myViewController *viewController = [[myViewController alloc] initWithNibName:@"myView" bundle:nil];
myNavigationViewController *navigationController = [[myNavigationViewController alloc] initWithRootViewController:viewController];
UIView *finalView = myeNavigationViewController.view;
[self.view addSubview:finalView];
ステータスバーとUINavigationControllerタイトルバーの間のビューの上部に奇妙な空白が表示されることを除いて、すべてが計画どおりに動作するようです。 代替テキストhttp://www.andrewskinner.name/problem.png
オンラインで検索しましたが、実際に何を検索するのかわかりません。他の誰かがこの問題を抱えていますか?助けの方向を教えていただけますか?
事前に感謝します。
解決
この質問の回答をご覧ください:
他のヒント
行の内容
UIView *finalView = myeNavigationViewController.view;
コードに追加しますか?最初にビューをUIViewに割り当てずにビューを直接追加できるため、冗長です。さらに、navigationControllerではなくmyNavigationControllerを参照するため、正しくありません。
私はこれをする傾向があります
myViewController *viewController = [[myViewController alloc] initWithNibName:@"myView" bundle:nil];
myNavigationViewController *navigationController = [[myNavigationViewController alloc] initWithRootViewController:viewController];
[navigationController.view setFrame: [self.view bounds]];
navigationController.delegate = self;
[self.view addSubview:[navigationController view]];
枠を境界に設定すると、上に尋ねていた上部の空白も削除されます。
問題は、UINavigationControllerがUIWindowの直接のサブビューであることが理想であることです。それ自体で位置とサイズを調整します。 UINavigationControllerをUIWindowサブビューの別のカスタムビューに追加する場合、ステータスウィンドウがUIWindowに表示されるかどうかを考慮することにより、このカスタムビューの位置とサイズに注意する必要があります。
カスタムビューをUINavigationControllerのサブクラスとして作成することをお勧めします:
mySubClass_NavigationController*nav=[[mySubClass_NavigationController alloc] initWithRootViewController:viewController ];
[myUIWindow addSubview:nav.view];
およびmySubClass_NavigationController内で、現在実行しているすべてのカスタマイズを自分で行うことができます(そのコントローラーが何であれ)。
私はしばらくこれに苦労しましたが、操作に非常によく似たコードを使用し、ナビゲーションコントローラーの上に白いバーがありました。
UINavigationControllerをUITabControllerのビューとして追加するときに問題が発生しました。私の場合のスペースは、ステータスバーを考慮に入れたUINavigationControllerのUINavigationBar部分が原因であり、実際にUINavigationControllerに表示しようとしていたビューの一部と重複していました。
これは、UITabBarControllerビューコントローラーの1つのloadViewで終わったコードです。
SomeUITableViewController *screenList = [[SomeUITableViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc]
initWithRootViewController:screenList];
CGRect frame = [[navController navigationBar] frame];
frame.origin.y = 0; // Was 20, set to 0 to not take into account the status bar.
[[navController navigationBar] setFrame:frame];
[self setView:[navController view]];
http://discussions.apple.com/message.jspaに詳細情報があります。 ?messageID = 7890362 。
IBには、「プッシュ時にボトムバーを非表示にする」という不明瞭なプロパティがあります。確認してください。問題は解決しました。
たぶん、2つのUIViewを手に入れたのかもしれませんが、 それぞれにステータスバーがあります。 xibを確認します。