UINavigationController Bar 后面的 UIViewController - 正确的方法

UIViewController behind UINavigationController Bar - the correct way

我正在用代码执行我的 UI,我遇到了问题,我的 UIViewController 骑在我的 UINavigationController 的栏后面。

我用谷歌搜索了一下,似乎有三种解决方案。然而,一切都指的是从 iOS 6 到 iOS 7 的过渡,这一切看起来有点像 hack。我无法想象这仍然是必须完成的方式。

解决方案是去除半透明,我不想这样做。在某个时间点,我可能希望内容滚动,然后在导航栏的背景中模糊显示。另一种解决方案是通过添加 "fake" 填充来向下移动所有内容。这也不理想,因为我不知道我的内容是否有一天会超出屏幕,然后如前所述,我希望将内容放在导航栏后面。然后是最后一个解决方案 self.edgesForExtendedLayout = UIRectEdge.None,它看起来非常像 hack。

也许是因为我启动 UIViewController 的方式,所以我将在此处添加我在 AppDelegate 中使用的代码:

var window: UIWindow?
var navigationController: UINavigationController?

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

     window = UIWindow()

     if let window = window {
         window.backgroundColor = UIColor.whiteColor()

         let vc = CustomUIViewController()
         navigationController = UINavigationController(rootViewController:vc)

         if let _ = navigationController {
             window.rootViewController = navigationController
         }
         window.makeKeyAndVisible()
     }
     return true
}

目前我正在使用 viewDidLoad() 中的 self.edgesForExtendedLayout = UIRectEdge.None 解决方法,但感觉不对。

感谢您提供有关如何正确处理此问题的任何建议。

将扩展边设置为 None 没有任何问题 - 这就是此设置 for.

如果您的内容实际上是静态的,另一种非常好的方法是使用自动布局并将视图控制器的主视图的子视图的顶部固定到视图控制器的顶部布局指南。顶部布局指南的底部会自动定位以匹配导航栏的底部。这"modern way"。它的优点是当导航栏消失时(即横向)它会继续工作。

如果您的内容是滚动视图,则设置内容内嵌,这样即使滚动视图本身向上延伸到导航栏后面,它的顶部content 当滚动视图一直滚动到顶部时完全可见。默认情况下,运行时实际上会自动为您执行此操作。