状态栏正在推送视图内容,仅在启动应用时启用了通话中状态栏

时间:2016-03-04 07:01:01

标签: ios xcode swift

所以我在这里有一些奇怪的行为。我有一个用Swift编码的基本iOS应用程序。它使用WKWebView以及其他一些小功能。

目前的一个主要问题是“通话状态栏”。如果我在应用程序打开时切换通话中状态栏,它看起来非常好:

enter image description here

虽然如果我在打开应用程序然后运行它之前切换通话中状态栏,布局就会变得奇怪:

enter image description here

将状态栏切换为“关闭”,然后它甚至变得更奇怪(顶部的空白区域为20px):

enter image description here

即使在应用程序打开时切换了通话状态栏,问题仍然存在,尽管我使用这个简单的单行修复此问题(因此第一张图像看起来很好):

webView.autoresizingMask = [UIViewAutoresizing.FlexibleWidth, UIViewAutoresizing.FlexibleHeight]

即使在激活呼叫时应用程序处于打开状态,如何让我的webview能够适应这种情况呢?

1 个答案:

答案 0 :(得分:0)

我也遇到过这个问题,并在应用程序打开时通过检查状态栏的大小来解决它,如果是40分,那么就会收听UIApplicationDidChangeStatusBarFrame通知,当发生一个,将视图框架移动到.zero

例如,在Swift 4中:

var sbshown: Bool = false

override func viewDidLoad() {
    super.viewDidLoad()

    //check height of status bar when app opens, and set a boolean if open
    let sbheight = UIApplication.shared.statusBarFrame.height

    NSLog("status bar height %f", sbheight)

    if (sbheight == 40) {
        sbshown = true
    }

    //set up to receive notifications when the status bar changes
    let nc = NotificationCenter.default 

    nc.addObserver(forName: NSNotification.Name.UIApplicationDidChangeStatusBarFrame, object: nil, queue: nil, using: statusbarChange)

}

然后在状态栏消失时实现一个调整视图大小和重新定位的方法:

func statusbarChange(notif: Notification) -> Void {

     if (sbshown) {
         sbshown = false

         self.view.frame.origin = .zero
         self.view.frame.size.height = UIScreen.main.bounds.height
     }    

}

因此,只有在应用程序打开时已经显示栏时才会重新定位,而不是在应用程序已经打开时显示和隐藏栏。