WKWebView覆盖NavigationBar与TabBar问题求助
解决WKWebView覆盖导航栏与TabBar的问题
一、禁止导航栏自动隐藏
导航栏仅在滚动时显示,大概率是开启了滑动隐藏功能,直接关闭即可:
override func viewDidLoad() { super.viewDidLoad() navigationController?.hidesBarsOnSwipe = false navigationController?.isNavigationBarHidden = false }
二、调整WKWebView布局与内容内边距
方法1:关闭导航栏半透明(快速解决)
关闭半透明效果后,系统会自动调整WebView布局,让内容避开导航栏和TabBar:
override func viewDidLoad() { super.viewDidLoad() navigationController?.navigationBar.isTranslucent = false // 如需TabBar也保持不透明,可添加此行 tabBarController?.tabBar.isTranslucent = false }
缺点是导航栏会变为不透明样式,若需保留半透明效果,使用方法2。
方法2:手动设置内容内边距(适配半透明)
手动给WebView的滚动视图设置内边距,让内容避开导航栏和TabBar区域:
override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() let topInset = navigationController?.navigationBar.frame.height ?? 0 let bottomInset = tabBarController?.tabBar.frame.height ?? 0 webView.scrollView.contentInset = UIEdgeInsets(top: topInset, left: 0, bottom: bottomInset, right: 0) webView.scrollView.scrollIndicatorInsets = webView.scrollView.contentInset }
放在viewDidLayoutSubviews中可保证布局更新时内边距同步调整。
方法3:安全区域约束(iOS 11+推荐)
给WebView设置约束时,对齐视图的安全区域,自动避开状态栏、导航栏和TabBar:
// 代码创建WebView时的约束示例 webView.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ webView.leadingAnchor.constraint(equalTo: view.leadingAnchor), webView.trailingAnchor.constraint(equalTo: view.trailingAnchor), webView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor), webView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor) ])
三、排查TabBar隐藏问题
若TabBar也仅在滚动时显示,检查是否开启了以下属性,确保关闭:
hidesBottomBarWhenPushed = false
内容的提问来源于stack exchange,提问作者J Frasco
相关产品推荐
相关产品推荐

