我有通过隐藏UINavigationController的导航栏进入全屏模式的代码 . 进入全屏时,我想要一个平滑的动画缩放效果 . 我用setNavigationBarHidden(_:animated:) . 即使在iOS 11上,这一切都运行良好,但在iPhone X上,动画效果不佳 . 在隐藏时,没有动画,导航栏就会消失 . 在取消隐藏时,它会进行动画处理,但导航栏的显示速度比导航控制器的内容区域减少的速度慢,因此在动画期间会通过导航栏区域显示丑陋的黑色背景 .
我可以在一个简单的测试应用程序中重新创建它 . 我有一个嵌入在UINavigationController中的UIViewController .
故事板
-
UINavigationController导航栏:Style == Black;半透明OFF
-
UIViewController:Extend Edges:所有选项OFF .
我已经尝试了我能想到的调整滚动视图插入和扩展边缘的所有组合,但它们没有任何区别 .
码
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()
}
1 回答
在您的情况下,您同时使用
barTintColor
和navigationBarStyle
与Show
Hide
动画 . barTintColor overrides the value implied by the Style attribute 您应该选择barTintColor
或navigationBarStyle
在下面的代码中我刚刚使用barTintColor
&navigationBarStyle是默认的Transulent
.EDIT: 如果要隐藏状态栏,请使用带有bool值的
prefersStatusBarHidden
. 并使用setNeedsStatusBarAppearanceUpdate
https://developer.apple.com/documentation/uikit/uinavigationbar