Swift 加载 WKWebview 时 prefersLargeTitles 崩溃
Swift prefersLargeTitles collapsed when WKWebview loaded
我用这段代码创建了一个带有大标题 NavigationBar
的 NavigationController
。
class NavigationController: UINavigationController {
override func viewDidLoad() {
super.viewDidLoad()
let appearance = UIBarButtonItem.appearance()
appearance.setBackButtonTitlePositionAdjustment(UIOffset.init(horizontal: 0.0, vertical: -60), for: .default)
self.navigationBar.barTintColor = UIColor.white
self.navigationBar.prefersLargeTitles = true
self.navigationBar.isTranslucent = true
self.navigationBar.tintColor = UIColor.black
}
}
一切正常,但是当我的 WKWebView
加载时,大标题栏不知何故自动折叠,没有任何 ScrollViewDelegate
代码。请在这里查看我的 gif 以澄清
这是我的 WKWebView
代码。
class resultViewController: UIViewController
{
private var webView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.white
webView = WKWebView(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: self.view.frame.size.height))
webView.navigationDelegate = self
webView.scrollView.delegate = self
self.view.addSubview(webView)
let url = URL(string: "https://google.com")
webView.load(URLRequest(url: url!))
}
}
我希望在第一个屏幕上保持大标题栏可见,并且仅在触发向上滚动事件时才折叠。
有什么想法吗?
- 这个问题的原因是当您的 webView 开始加载页面时,您的导航栏高度正在改变。所以使用
viewLayoutMarginsDidChange()
我们可以改变导航栏的高度。
viewLayoutMarginsDidChange()
调用以通知视图控制器其根视图的布局边距已更改。每次导航栏高度变化时都会调用此方法。
参考这个答案
我用这段代码创建了一个带有大标题 NavigationBar
的 NavigationController
。
class NavigationController: UINavigationController {
override func viewDidLoad() {
super.viewDidLoad()
let appearance = UIBarButtonItem.appearance()
appearance.setBackButtonTitlePositionAdjustment(UIOffset.init(horizontal: 0.0, vertical: -60), for: .default)
self.navigationBar.barTintColor = UIColor.white
self.navigationBar.prefersLargeTitles = true
self.navigationBar.isTranslucent = true
self.navigationBar.tintColor = UIColor.black
}
}
一切正常,但是当我的 WKWebView
加载时,大标题栏不知何故自动折叠,没有任何 ScrollViewDelegate
代码。请在这里查看我的 gif 以澄清
这是我的 WKWebView
代码。
class resultViewController: UIViewController
{
private var webView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.white
webView = WKWebView(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: self.view.frame.size.height))
webView.navigationDelegate = self
webView.scrollView.delegate = self
self.view.addSubview(webView)
let url = URL(string: "https://google.com")
webView.load(URLRequest(url: url!))
}
}
我希望在第一个屏幕上保持大标题栏可见,并且仅在触发向上滚动事件时才折叠。
有什么想法吗?
- 这个问题的原因是当您的 webView 开始加载页面时,您的导航栏高度正在改变。所以使用
viewLayoutMarginsDidChange()
我们可以改变导航栏的高度。 viewLayoutMarginsDidChange()
调用以通知视图控制器其根视图的布局边距已更改。每次导航栏高度变化时都会调用此方法。
参考这个答案