在UIStatusBar下以编程方式创建UINavigationController与大标题属性

时间:2017-10-13 10:06:47

标签: swift uinavigationcontroller uinavigationbar

我是以编程方式创建UINavigationController

navigationController = UINavigationController(rootViewController: modeSelectVC!)
navigationController?.delegate = self

window.rootViewController = navigationController
window.makeKeyAndVisible()

然后我自定义我的UINavigationBar外观:

navigationBarAppereance.barTintColor = UIColor.ColorPalette.bostonUniversityRed
navigationBarAppereance.tintColor = UIColor.ColorPalette.eerieBlack
navigationBarAppereance.barStyle = .black
navigationBarAppereance.isTranslucent = true
navigationBarAppereance.prefersLargeTitles = true
navigationBarAppereance.largeTitleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.ColorPalette.babyPowder]

配置的UINavigationBar隐藏在状态栏中提供的rootViewController中,但当rootViewController推送另一个视图控制器时,状态栏和导航栏都会变得可见:

UINavigationController with problematic <code>Back</code> button placement

结果是我编程的结果,但正如您在上面所看到的那样,back按钮未对齐。如果我放弃了更喜欢的大标题,那么后退按钮就像往常一样正确对齐,但为什么在使用大标题时它会不对齐。

2 个答案:

答案 0 :(得分:2)

这个here有一个很好的答案:

  

您应该将导航栏的顶部固定到状态栏的底部,并使用UIBarPositioningDelegate机制将其位置设置为.topAttached,这将使其在状态栏下正确拉伸。

答案 1 :(得分:2)

我有点解决了这个问题。一旦我在初始视图控制器上启用状态栏,之后,无论出现什么,都会正确显示导航栏和状态栏。

我仍然不知道导致问题的原因(如果这是我的实施错误或文档很差),但处理UINavigationBar可能会很棘手!