gpt4 book ai didi

ios - setNavigationBarHidden 动画在 iPhone X 上无法正常工作

转载 作者:可可西里 更新时间:2023-11-01 05:48:58 27 4
gpt4 key购买 nike

我有通过隐藏 UINavigationController 的导航栏进入全屏模式的代码。我想要进入全屏时流畅的动画缩放效果。我用 setNavigationBarHidden(_:animated:) .到目前为止,这一切都运行良好,即使在 iOS 11 上也是如此,但在 iPhone X 上动画效果不佳。隐藏时,没有动画,导航栏就消失了。取消隐藏时,它确实有动画,但导航栏出现的速度比导航 Controller 内容区域减少的速度慢,因此在动画期间导航栏区域显示出丑陋的黑色背景。

我可以在一个简单的测试应用程序中重新创建它。我在 UINavigationController 中嵌入了一个 UIViewController。

Storyboard

  • UINavigationController 导航栏:样式 == 黑色;半透明关闭
  • UIViewController:延伸边缘:关闭所有选项。

我已经尝试了所有我能想到的 Adjust Scroll View Insets 和 Extend Edges 的组合,但它们没有任何区别。

代码

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)

setFullScreen(on: fullScreen, animated: animated)
}

override var prefersStatusBarHidden: Bool
{
return fullScreen
}

override var preferredStatusBarStyle: UIStatusBarStyle
{
return .lightContent
}

@IBAction func onToggleNavBarVisibility(_ sender: Any) {

if let navBarHidden = self.navigationController?.isNavigationBarHidden {
// Toggle the state
fullScreen = !navBarHidden

setFullScreen(on: fullScreen, animated: true)
}
}

private func setFullScreen(on : Bool, animated : Bool) {

self.navigationController?.setNavigationBarHidden(on, animated: animated)
self.setNeedsStatusBarAppearanceUpdate()
}

Result on iPhone X (slow animations)

最佳答案

在您的情况下,您同时使用了 barTintColornavigationBarStyle 以及 Show Hide 动画。barTintColor 覆盖 Style 属性隐含的值您应该选择 barTintColornavigationBarStyle在下面的代码中,我刚刚使用了 barTintColor,navigationBarStyle 是 Transulent 的默认设置。

enter image description here

    var fullScreen = false{
didSet{
self.setNeedsStatusBarAppearanceUpdate()
}
}
override func viewDidLoad() {
super.viewDidLoad()
title = "Navigation Bar"
navigationController?.navigationBar.barTintColor = .red
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(true)
setFullScreen(on: fullScreen, animated: animated)
}
@IBAction func onToggleNavBarVisibility(_ sender: Any) {
if let navBarHidden =
self.navigationController?.isNavigationBarHidden {
// Toggle the state
fullScreen = !navBarHidden
setFullScreen(on: fullScreen, animated: true)
}
}
private func setFullScreen(on : Bool, animated : Bool) {
self.navigationController?.setNavigationBarHidden(on, animated: animated)
self.setNeedsStatusBarAppearanceUpdate()
}

编辑:如果你想隐藏状态栏 -将 prefersStatusBarHidden 与 bool 值一起使用。 & 使用 setNeedsStatusBarAppearanceUpdate

   override var prefersStatusBarHidden: Bool {
return fullScreen
}

https://developer.apple.com/documentation/uikit/uinavigationbar

关于ios - setNavigationBarHidden 动画在 iPhone X 上无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47239687/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com