【发布时间】:2019-03-14 15:16:29
【问题描述】:
我已经在这个问题上转了转。我只想在小于 iPhone 6 的设备上隐藏状态栏。This 答案很好,但代码现在已弃用并引发错误。
我遵循了this 帖子上的所有建议(这很有帮助),并且我有工作代码,但我必须复制并粘贴到每个视图控制器上。这似乎是个坏主意。它当然不遵守 DRY 方法。
这是适用于单个视图控制器的代码:
class Step1SplashVC: UIViewController {
var hideStatusBar: Bool = false
override var prefersStatusBarHidden: Bool { return true }
override func viewDidLoad() {
super.viewDidLoad()
let screenSize = Int(UIScreen.main.bounds.width)
print("screen size:", screenSize)
if screenSize <= 320 {
print("device is too small. need to hide status bar")
hideStatusBar = true
setNeedsStatusBarAppearanceUpdate()
}
我的问题是,我该如何重构它,这样我就不会复制和粘贴到我项目中的每个视图控制器(我总共有大约 35 个视图控制器)?
我尝试为 UIViewController 创建一个扩展,但它一直抛出错误。
这是错误的代码:
extension UIViewController {
private struct Holder {
static var hideStatusBar: Bool = false
}
var screensize: Bool {
get {
return Int(UIScreen.main.bounds.width) <= 320
}
set {
Holder.hideStatusBar = true
}
}
override var prefersStatusBarHidden: Bool { return true }
}
我得到的错误是:
属性不会覆盖其超类中的任何属性
所以我创建扩展的努力没有奏效。
如何隐藏小型设备的状态栏,而无需将代码复制并粘贴到每个视图控制器上?
谢谢!!
【问题讨论】:
-
如果
prefersStatusBarHidden总是返回true...,我从你的代码中不太明白hideStatusBar是如何工作的? -
@shim 它不起作用。我开始对计算属性进行编码,但被“覆盖变量”部分卡住了。我没有完成“设置”部分的计算属性代码。