![](/img/trans.png)
[英]Navigation Bar is overlapping with another View Controller's Navigation Bar in iOS7
[英]how to present a view controller on iOS7 without the status bar overlapping
我看到當我將我的應用程序遷移到iOS 7時,在呈現視圖控制器時導航欄出現在狀態欄下。 我想很多人都遇到過同樣的問題。 這是我所看到的截圖:
新視圖必須“模態”出現,即我需要presentViewController。
顯示某種導航欄或工具欄,狀態欄采用iOS 7樣式導航欄的背景顏色。
它必須適用於iOS 6。
我正在使用xib來處理布局,並啟用了autolayout。
呃,我們是否已經回到了iOS之前的5天並且沒有框架? 另外,與自動布局混合通常不是一個好主意。
選項A和B的一個缺點是狀態欄不會混合到您的導航中:
主要缺點是您必須使用約束並計算導航和狀態欄高度。 呸。
在iOS 7上看起來不錯,但在iOS 6上中斷。您需要以編程方式更新導航欄的高度,並確保視圖的其余部分正確更新。 凌亂。
多個缺點:你將硬編碼ios6 / 7增量。 也不適用於autolayout。
這是我選擇的解決方法。 見下面的答案。
我發現最簡單的解決方法是將要顯示的視圖控制器包裝在導航控制器中,然后顯示該導航控制器。
MyViewController *vc = [MyViewController new];
UINavigationController *nav = [[UINavigationController alloc]
initWithRootViewController:vc];
[self presentViewController:nav animated:YES completion:NULL];
您需要將最頂層視圖中的垂直約束添加到頂部布局指南 ,如Apple的以下文章中所述。
https://developer.apple.com/library/ios/qa/qa1797/_index.html
下一個代碼對我有用。 只需將它放在呈現新控制器的控制器上即可。
#pragma mark hidden status bar
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
[[UIApplication sharedApplication] setStatusBarHidden:YES];
}
打開你的xib文件並選擇viewcontroller。 在檢查器選項卡中選擇屬性,然后在TopBar“Opaque Navigation Bar”中選擇。 這解決了我的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.