iOS Swift 4 状态栏 - 禁用半透明

8

我正在尝试将我的iOS应用程序(webView)的状态栏设置为不透明。

我在func viewDidLoad()中尝试了以下代码:

self.navigationController?.navigationBar.isTranslucent = false

在appDelegate中:

    UINavigationBar.appearance().isTranslucent = false
    UINavigationBar.appearance().backgroundColor = .white

当我滚动页面时,会出现以下内容: enter image description here

您有navigationBar吗?从您的截图上并不能看出来。 - Galo Torres Sevilla
1
取决于情况,如果您的视图锚定在父视图而不是安全区域上,则更好。这将解决问题。但您可能需要不同类型的行为。 - Vanya
请检查您的约束条件。scrollView 的 TopConstraint 必须锚定到 SafeArea 而不是 superView。 - Enea Dume
4个回答

10

您无法更改状态栏的这些属性。您只能设置 .default、.lightContent。但是,如果您想要的话,可以在其下方放置一个视图,该视图不透明并具有背景颜色。像这样:

let statusBarFrame = UIApplication.shared.statusBarFrame
let statusBarView = UIView(frame: statusBarFrame)
self.view.addSubview(statusBarView)
statusBarView.backgroundColor = .green

可以放在您的ViewControllerviewDidLoad()方法中。


9

Swift 5.1 iOS 13.0 如果当前的废弃不再使用,以防万一...

 if #available(iOS 13.0, *) {

            let window = UIApplication.shared.windows.filter {$0.isKeyWindow}.first
            let statusBarFrame = window?.windowScene?.statusBarManager?.statusBarFrame

            let statusBarView = UIView(frame: statusBarFrame!)
            self.view.addSubview(statusBarView)
            statusBarView.backgroundColor = .green
        } else {
            //Below iOS13
            let statusBarFrame = UIApplication.shared.statusBarFrame
            let statusBarView = UIView(frame: statusBarFrame)
            self.view.addSubview(statusBarView)
            statusBarView.backgroundColor = .green
        }

1
这对我很有帮助,当我尝试从屏幕上方滑动视图并在动画过程中不看到状态栏时,可以解决问题:
view.clipsToBounds = true

0

我认为您无法调整状态栏的半透明属性。不过,您可以将其隐藏。请在您的ViewController中粘贴以下代码:

override var prefersStatusBarHidden: Bool {
  return true
}

如果不起作用,请检查您的Info.plist文件,看看您的状态栏外观是否基于ViewController。添加以下内容:
<key>UIViewControllerBasedStatusBarAppearance</key>
<true/>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接