ios - 在 UINavigationController 堆栈中仅隐藏一个 UIViewController 的导航栏和状态栏

标签 ios swift uinavigationcontroller uinavigationbar uistoryboardsegue

我希望我在导航 Controller 堆栈中推送的 viewController 之一是“全屏”——没有导航栏,也没有状态栏。 我有这段代码在导航 Controller 的 View Controller 之一中隐藏和显示导航栏(我希望它在全屏上推送):

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    self.navigationController?.setNavigationBarHidden(true, animated:animated)   
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    self.navigationController?.setNavigationBarHidden(false, animated:animated) 
}

在同一个 viewController 中,我还隐藏了状态栏:

override var prefersStatusBarHidden: Bool {
    return true
}

它按预期隐藏和显示,但问题是我在插入此 View Controller 并从它返回时在转换中出现黑色条纹(参见图片)。

推送到这个 Controller : Push to this controller

然后从这个 Controller 返回(后退按钮):

Back from this controller

出现这种情况是因为 prefersStatusBarHidden 函数删除它可以解决问题。

显示/隐藏导航栏的代码取自: https://stackoverflow.com/a/2406167/4207465

基于苹果开发者库: “显示和隐藏导航栏 - 当导航栏与导航 Controller 结合使用时,您始终使用 UINavigationController 的 setNavigationBarHidden:animated: 方法来显示和隐藏导航栏...”

不知道为什么会这样, 感谢您的帮助!

最佳答案

@Boaz Frenkel

有一种解决方案可以解决带或不带状态栏的导航栏隐藏和显示期间的黑条。

ViewController A:全屏 View

override func viewWillAppear(animated: Bool) {
    self.navigationController?.setNavigationBarHidden(true, animated: animated)
    super.viewWillAppear(animated)
}

override func viewDidAppear(animated: Bool) {
    UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: .Fade)
    super.viewDidAppear(animated)
}

ViewController B : 带有 NavigationBar 和状态栏

override func viewWillAppear(animated: Bool) {

    self.navigationController?.setNavigationBarHidden(false, animated: animated)
    UIApplication.sharedApplication().setStatusBarHidden(false, withAnimation: .None)
    super.viewWillAppear(animated)
}

关于ios - 在 UINavigationController 堆栈中仅隐藏一个 UIViewController 的导航栏和状态栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41922741/

相关文章:

ios - 使用百分比填充 UIView

ios - 快速点击uitableview中的headerview

iphone - iOS 如何使 UITabBar 和 UINavigationController 变暗而不隐藏它们?

ios - cancelTrackingWithEvent 被调用甚至触摸委托(delegate)返回 YES

ios - 如何在 ViewController 之间传递 UIButton 的框架和原点

ios - 自动布局不是那么自动

arrays - 如何正确设置 for 循环以每侧显示 1 个图像

swift - UINavigationController、UITabBarController、UITableViewController

iphone - 我如何使用相同的导航 Controller 从不同的单元格转到不同的 View Controller ?

ios - 来自NSDictionary的Objective-C字符