簡體   English   中英

ios7 presentViewController將navBar從新的64px條恢復到舊的44px版本

[英]ios7 presentViewController reverts navBar from new 64px bar back to old 44px version

我有一個僅支持ios7 +的應用程序。導航欄設置使用狀態欄下方顯示的新的64px高條。 應用啟動時的外觀如下:

在此處輸入圖片說明

如果我做任何形式的“ presentViewController”,當我關閉視圖時,導航欄將移回到44px高度,並且仍會顯示在狀態欄下方,這反過來又會使視圖的所有內容也向上移動。 看起來像這樣:

在此處輸入圖片說明

無論是我呈現自己的視圖還是僅呈現UIImagePickerView,通過導航控制器進行的任何形式的向上滑動模式都將破壞導航欄的設置。 有想法該怎么解決這個嗎?

一些注意事項:

  • 在plist中:“基於View Controller的狀態欄外觀”設置為“ NO”
  • 導航欄配置了self.navController.navigationBar.translucent = NO;
  • 我正在使用.xib NOT Storyboard

更新:

我在PKRevealController( https://github.com/pkluz/PKRevealController )內部具有導航控制器。 取出顯示控制器並僅將導航控制器添加到窗口本身即可解決此問題...為什么顯示控制器會導致其行為有所不同?

解:

原來是PKRevealController庫導致了此問題。 我修改了它在AppDelegate中的設置方式,並解決了該問題,盡管這有點“ hacky”。 我將“之前”和“之后”配置放在下面:

初始設置為:

  1. 配置PKRevealController
  2. 配置NavController並添加rootView
  3. 設置pkreveal前視圖= navController
  4. 將顯示控制器添加到窗口作為Windows根視圖

解決方法是

  1. 創建一個包含NavController
  2. 做上述步驟1-3
  3. 將pkrevealcontroller添加到包含的navController
  4. 將包含導航控制器的導航欄設置為隱藏
  5. 添加包含導航控制器到窗口作為根視圖

如果它的navigationcontroller比您可以在每個viewcontroller的viewdidload中使用它:

if ([self respondsToSelector:@selector(edgesForExtendedLayout)]) {
    self.edgesForExtendedLayout = UIRectEdgeNone;
} 

我有同樣的問題,但只需將UINavigationBar的Y位置設置為20px而不是0px即可輕松解決。 然后,您必須將UINavigationBarDelegate分配給您的ViewController:

[_navigationBar setDelegate:self];

此外,您必須將此方法添加到您的ViewController中,由於Delegate分配,該方法將被調用:

-(UIBarPosition)positionForBar:(id<UIBarPositioning>)bar
{
    return UIBarPositionTopAttached;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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