gpt4 book ai didi

ios - 如何仅在较小的设备上隐藏状态栏?

转载 作者:搜寻专家 更新时间:2023-10-31 22:53:16 29 4
gpt4 key购买 nike

我已经绕了又绕。我只想在小于 iPhone 6 的设备上隐藏状态栏。This答案很好,但代码现在已弃用并引发错误。

我遵循了关于 this 的所有建议发布(非常有帮助),我有工作代码,但我必须复制并粘贴到每个 View Controller 上。这似乎是个坏主意。它当然不遵守 DRY 方法。

这是我的适用于单个 View Controller 的代码:

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()
}

我的问题是,我该如何重构它,这样我就不会复制和粘贴到项目中的每个 View Controller (我总共有大约 35 个 View Controller )?

我尝试为 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 }
}

我得到的错误是:

Property does not override any property from its superclass

所以我创建扩展的努力没有奏效。

如何隐藏较小设备的状态栏,而不必将代码复制并粘贴到每个 View Controller 上?

谢谢!!

最佳答案

将您编写的代码(适用于单个 View Controller )放入 BaseViewControllerUIViewController 的子类:

class BaseViewController: 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()
}
}
}

然后您可以在项目中的每个 View Controller 上继承 BaseViewController(替换 class XYZViewController: UIViewController),并实现 super.viewDidLoad(),例如:

class Step1SplashVC: BaseViewController {

override func viewDidLoad() {
super.viewDidLoad()

//Whatever you want, specific to each VC
}
}

关于ios - 如何仅在较小的设备上隐藏状态栏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55166101/

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