【问题标题】:UIViewController behind UINavigationController Bar - the correct wayUIViewController 在 UINavigationController Bar 后面——正确的方法
【发布时间】:2015-10-10 15:42:18
【问题描述】:

我正在编写我的 UI 代码,我遇到了问题,我的 UIViewController 骑在我的 UINavigationController 酒吧后面。

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

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

也许是因为我启动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 解决方法,但感觉不对。

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

【问题讨论】:

  • 如果你的 UIViewController 的第一个子视图是 UIScrollView,你可以自动将AdjustScrollViewInsets 设置为 YES 并且滚动视图应该很好地嵌入

标签: swift uiviewcontroller uinavigationcontroller


【解决方案1】:

将扩展边缘设置为“无”没有任何问题 - 这就是此设置的

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

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

【讨论】:

猜你喜欢
  • 2011-05-13
  • 1970-01-01
  • 2018-04-02
  • 2017-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多