簡體   English   中英

如何在沒有狀態欄重疊的iOS7上呈現視圖控制器

[英]how to present a view controller on iOS7 without the status bar overlapping

我看到當我將我的應用程序遷移到iOS 7時,在呈現視圖控制器時導航欄出現在狀態欄下。 我想很多人都遇到過同樣的問題。 這是我所看到的截圖:

現有的導航

要求:

  • 新視圖必須“模態”出現,即我需要presentViewController。

  • 顯示某種導航欄或工具欄,狀態欄采用iOS 7樣式導航欄的背景顏色。

  • 它必須適用於iOS 6。

  • 我正在使用xib來處理布局,並啟用了autolayout。

選項:

A.將視圖的框架向下移動一點。

呃,我們是否已經回到了iOS之前的5天並且沒有框架? 另外,與自動布局混合通常不是一個好主意。

B.在導航欄下方添加一點間隙。

選項A和B的一個缺點是狀態欄不會混合到您的導航中:

導航與差距

C.以編程方式添加約束。

主要缺點是您必須使用約束並計算導航和狀態欄高度。 呸。

D.拉伸導航欄/工具欄的高度以包括狀態欄的區域。

在iOS 7上看起來不錯,但在iOS 6上中斷。您需要以編程方式更新導航欄的高度,並確保視圖的其余部分正確更新。 凌亂。

在此輸入圖像描述

E.在IB中使用iOS6 / 7增量進行混亂。

多個缺點:你將硬編碼ios6 / 7增量。 也不適用於autolayout。

F.使用嵌套的UINavigationController。

這是我選擇的解決方法。 見下面的答案。

uinavcontroller解決方法

我發現最簡單的解決方法是將要顯示的視圖控制器包裝在導航控制器中,然后顯示該導航控制器。

MyViewController *vc = [MyViewController new];
UINavigationController *nav = [[UINavigationController alloc] 
    initWithRootViewController:vc];
[self presentViewController:nav animated:YES completion:NULL];

好處:

  • 不需要框架。
  • 相同的代碼適用於iOS 6和iOS 7。
  • 比其他解決方法更難看。

缺點:

  • 您可能希望將XIB留空導航欄或工具欄,並以編程方式將UIBarButtonItem添加到導航欄。 幸運的是,這很容易。

您需要將最頂層視圖中的垂直約束添加到頂部布局指南 ,如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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM