加载 webview 时,带有大标题的导航栏会缩小
Posted
技术标签:
【中文标题】加载 webview 时,带有大标题的导航栏会缩小【英文标题】:Navigation bar with large title shrinks when webview is loaded 【发布时间】:2018-12-11 16:39:27 【问题描述】:在 viewcontroller 中,我正在加载启用大导航标题的 webview(WKWebview)。问题是它在 webview 加载之前完美地显示了大型导航栏和标题,一旦 webview 加载它就会缩小到正常。任何帮助将不胜感激。
提前谢谢...!
【问题讨论】:
我也有这个问题。它发生不一致,有时标题会跳到常规,有时会保持不变。烦人! 【参考方案1】:此问题的原因是当您的 webView 开始加载页面时,您的 navigationBar 高度正在发生变化。所以使用斯威夫特4,斯威夫特5:
viewLayoutMarginsDidChange()
我们可以改变navigationBar的高度。
viewLayoutMarginsDidChange()
调用以通知视图控制器其根视图的布局边距已更改。每次导航栏高度发生变化时都会调用此方法。
以下代码对我有用
import WebKit
class ViewController: UIViewController, WKNavigationDelegate
private var webView: WKWebView!
var didChange = false //Set true when we have to update navigationBar height in viewLayoutMarginsDidChange()
override func viewLayoutMarginsDidChange()
if didChange
print("Height : - \(self.navigationController?.navigationBar.frame.size.height)")
// set NavigationBar Height here
self.navigationController!.navigationBar.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 96.0)
didChange.toggle()
override func viewDidLoad()
super.viewDidLoad()
let appearance = UIBarButtonItem.appearance()
appearance.setBackButtonTitlePositionAdjustment(UIOffset.init(horizontal: 0.0, vertical: -60), for: .default)
self.navigationItem.title = "WebView"
self.navigationController?.navigationBar.isTranslucent = true
self.navigationController?.navigationBar.tintColor = UIColor.black
self.navigationController?.navigationBar.prefersLargeTitles = true
webView = WKWebView(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: self.view.frame.size.height))
webView.navigationDelegate = self
view = webView
let myURL = URL(string:"https://google.com")
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)
func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!)
print("Did Start")
//webView page starts loading
didChange = true
【讨论】:
我必须确保我拨打self.navigationController?.navigationBar.isTranslucent = true
否则viewLayoutMarginsDidChange()
不会再打电话了
我一直在寻找近 5 个小时来解决我的特定问题。尝试了书中的所有其他内容,但这是我可以开始工作的唯一解决方法。谢谢!
对我不起作用。起初,您的解决方案似乎一切都很好。但是,当您非常快速地做出两指向上手势时,navigationBar 仍然崩溃。还有其他解决方案可以让导航栏真正保持大吗?【参考方案2】:
这个解决方案对我有用,但不是使用
self.navigationController!.navigationBar.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 96.0)
我们可以使用:
self.navigationController?.navigationBar.sizeToFit()
【讨论】:
以上是关于加载 webview 时,带有大标题的导航栏会缩小的主要内容,如果未能解决你的问题,请参考以下文章