作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有 prefersStatusBarHidden
动态返回值,它确实显示/隐藏状态栏,除了一个问题:
当prefersStatusBarHidden
返回值为false
时,无论我们是否处于垂直紧凑的环境中,状态栏都会显示(这不是不使用时的默认行为>prefersStatusBarHidden
)。
有什么方法可以使用 prefersStatusBarHidden
仍然能够检测我们是否处于垂直紧凑的环境中并隐藏状态栏。
我当前的代码如下所示:
class SomeViewController: UIViewController {
var someStatusValue = false
override var prefersStatusBarHidden : Bool {
guard (someStatusValue) else { return true }
// Here instead of returning `false`, if we are on VERTICALLY COMPACT ENVIRONMENT return `true` else `false`
return false
}
}
附加:我正在使用基于 UINavigationController 的 View Controller ,并且在 info.plist 中使用基于 View Controller 的状态栏外观:是
最佳答案
我终于明白了
override var prefersStatusBarHidden : Bool {
guard (someStatusValue) else { return true }
if (UIDevice.current.userInterfaceIdiom == .phone && UIDeviceOrientationIsLandscape(UIDevice.current.orientation)) {
return true
} else {
return false
}
}
我还有以下行来注册 viewWillAppear
NotificationCenter.default.addObserver(self, selector: #selector(orientationChanged(_:)), name: .UIDeviceOrientationDidChange, object: nil)
以及负责接收通知并更新状态栏的函数:
func orientationChanged(_ note: Notification) {
self.setNeedsStatusBarAppearanceUpdate()
}
注意:您必须 NotificationCenter.default.removeObserver
才能在 viewWillDisappear
中取消注册方向通知
关于ios - 使用prefersStatusBarHidden而不丢失默认状态栏可见性行为(在垂直紧凑环境中隐藏状态栏),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41306146/
我是一名优秀的程序员,十分优秀!