所以我在这里有一些奇怪的行为。我有一个用Swift编码的基本iOS应用程序。它使用WKWebView以及其他一些小功能。
目前的一个主要问题是“通话状态栏”。如果我在应用程序打开时切换通话中状态栏,它看起来非常好:
虽然如果我在打开应用程序然后运行它之前切换通话中状态栏,布局就会变得奇怪:
将状态栏切换为“关闭”,然后它甚至变得更奇怪(顶部的空白区域为20px):
即使在应用程序打开时切换了通话状态栏,问题仍然存在,尽管我使用这个简单的单行修复此问题(因此第一张图像看起来很好):
webView.autoresizingMask = [UIViewAutoresizing.FlexibleWidth, UIViewAutoresizing.FlexibleHeight]
即使在激活呼叫时应用程序处于打开状态,如何让我的webview能够适应这种情况呢?
答案 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
}
}
因此,只有在应用程序打开时已经显示栏时才会重新定位,而不是在应用程序已经打开时显示和隐藏栏。