【问题标题】:Status bar visibility is not unified on iOSiOS 上的状态栏可见性不统一
【发布时间】:2017-11-16 04:05:26
【问题描述】:

我正在将 iOS 应用程序从 8 迁移到 XCode9。我不确定是什么原因造成的,但似乎 Swift 3.2/Xcode 9 表现不佳。

所以我正在开发的这个应用程序在所有视图控制器上都有状态栏,但在迁移后它开始只显示主视图。通过选项卡按钮更改视图它变为空白,如下面的屏幕截图。

View controller-based status bar appearanceNOHide Status BarOFF

我添加了setNeedsStatusBarAppearanceUpdate() 及其参数,但仍然无法正常工作。

这里是“另一个视图”的 ViewController 的代码

import UIKit

class InfoViewController: UITableViewController {

private var threads: [Info] = []
private var loading: Bool = false
private var hasNext: Bool = true

private var selectedThread: Info?
private var noInfoView: UIView?

internal var shouldRefresh: Bool = true
private var pagingIndicatorView: UIActivityIndicatorView!

private var timer: Timer?
private var poolingInterval: TimeInterval = 60 * 3

private var shouldClearThread: Bool = false
private var nextViewController: InfoDetailViewController?

let RequireCheckStatusForMessagesNotificationKey = "RequireCheckStatusForMessagesNotificationKey"

deinit {
    NotificationCenter.default.removeObserver(self)
    stopPooling()
}

override func viewDidLoad() {
    super.viewDidLoad()
    setNeedsStatusBarAppearanceUpdate()
    tableView.contentInset.bottom = 40

    pagingIndicatorView = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.gray)
    pagingIndicatorView.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 50)
    pagingIndicatorView.hidesWhenStopped = true

    NotificationCenter.default.addObserver(self, selector: #selector(InfoViewController.requireCheckInfosForMessagesNotificationHandler(notif:)), name: NSNotification.Name(rawValue: RequireCheckStatusForMessagesNotificationKey), object: nil)
}

var statusBarStyle : UIStatusBarStyle = .lightContent

override var preferredStatusBarStyle: UIStatusBarStyle {
    get {
        return statusBarStyle
    }
}

var statusBarStatus : Bool = false

override var prefersStatusBarHidden: Bool {
    get {
        return statusBarStatus
    }
}

【问题讨论】:

  • "但似乎 Swift 3.2/Xcode 9 表现不佳" 不。做错了什么。但是你没有告诉我们你在做什么,所以谁知道它是什么?如果你需要帮助,你必须更加乐于助人。
  • @matt 很抱歉,但在代码中没有写任何关于状态栏的内容...你能告诉我你需要什么信息吗?
  • 很难理解“划出”区域的特定问题(以及NO/YES 措辞 - 这不是 Swift - 以及“代码转储”和说明)。所以让我们试试这个......(1)你能用更好的截图或措辞描述“Swift 3.2/Xcode 9”和...... Swift 3.1 和Xcode 8? (2) 你能把你的代码精简到我们可以实际复制问题的程度吗?显而易见的一点 - @matt 已经说过 - faultnot Swift 3.2 或 Xcode 9。如果是这样,其他人会抱怨几个月。
  • 状态栏存在。你的背景是白色的,所以你看不到它。试试黑色背景。

标签: ios swift xcode9 swift3.2


【解决方案1】:

View controller-based status bar appearance 设置为YES 并使用UIViewController 的以下参数更容易:

override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
    get {
        return .slide
    }
}

var statusBarStyle : UIStatusBarStyle = .default

override var preferredStatusBarStyle: UIStatusBarStyle {
    get {
        return statusBarStyle
    }
}

var statusBarStatus : Bool = false

override var prefersStatusBarHidden: Bool {
    get {
        return statusBarStatus
    }
}

正如您在此处看到的,我指的是我实际想要的值的自定义存储参数,因此更改状态栏的更新就是更改这些自定义参数并调用statusBarNeedsUpdate

尝试这种方法,如果它不能解决您的问题,请为您的控制器提供代码。

【讨论】:

  • 尝试添加它们但仍然无法正常工作:(我编辑了问题所以请看一下
猜你喜欢
  • 2019-04-20
  • 1970-01-01
  • 2015-06-29
  • 2016-07-12
  • 2016-05-18
  • 1970-01-01
  • 2018-01-20
  • 2012-12-10
  • 1970-01-01
相关资源
最近更新 更多