在WKWebView中的网页完成加载后,大标题崩溃了。 Here is GIF example of what happens。
我在互联网上看了很多,发现有两个帖子可能指向正确的方向:
prefersLargeTitles not always honored - Apple Developer Forums
prefersLargeTitles - Displays correctly for a split second then collapses - Reddit
我希望大标题在网页加载时显示并保留在原位。当用户向上滚动(向下浏览网页)时,大标题应折叠为较小的版本。如果用户返回网页顶部,则大标题应该再次出现。
这是我为WKWebView设置的代码:
import UIKit
import WebKit
class ViewController: UIViewController, WKUIDelegate {
@IBOutlet weak var webView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
let myURL = URL(string: "https://www.apple.com")
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)
}
}
朝正确方向的一点将不胜感激!可能与scrollView.contentInsetAdjustmentBehavior
有关吗?
编辑:是的-我确保Web视图是Main.storyboard中安全区域之后的第一个视图。
答案 0 :(得分:2)
通常在您的可滚动视图(UITableView,UICollectionView,UIWebView等)不是第一个视图时发生。
请在Main.storyboard中检查您的视图顺序。适当的顺序应如下所示: 1-安全区 2-您的网络视图 3-其他意见...
如果不起作用,请尝试使用scrollViewDidScroll方法解决,方法是根据contentOffset.y更改大型导航栏的显示模式
答案 1 :(得分:0)
我可以根据Tobonaut的建议进行修改:
class WebViewController: UIViewController {
var webView: WKWebView!
fileprivate var firstObservedOffset: CGFloat = 0
override func viewDidLoad() {
webView.scrollView.delegate = self
webView.isHidden = true
}
// TODO: implement your loading mechanism
}
extension WebViewController: WKNavigationDelegate {
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
webView.scrollView.contentOffset = CGPoint(x: 0, y: firstObservedOffset)
}
}
extension WebViewController: UIScrollViewDelegate {
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let scrollView = self.webView.scrollView
let yOffset = scrollView.contentOffset.y
if yOffset != 0 && firstObservedOffset == 0 {
firstObservedOffset = yOffset
return
}
guard webView.isHidden
&& firstObservedOffset != 0
&& scrollView.contentOffset.y != firstObservedOffset else {
return
}
scrollView.contentOffset = CGPoint(x: 0, y: firstObservedOffset)
}
}
答案 2 :(得分:0)
以下内容对我有用(对不起,它在Objective-C中)。
- (void)viewDidLoad {
[super viewDidLoad];
self.webView.navigationDelegate = self;
self.webView.scrollView.delegate = self;
self.webView.scrollView.scrollEnabled = YES;
[_webView loadHTMLString:_htmlString baseURL:_baseURL];
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (scrollView == _webView.scrollView) {
if (_webView.isLoading) {
[_webView.scrollView setContentOffset:CGPointMake(0, 0) animated:NO];
return;
}
}
}
答案 3 :(得分:0)
我遇到了相同的问题,并使用此变通办法解决了该问题。
override func viewDidLoad() {
webView.navigationDelegate = self
webView.scrollView.contentInsetAdjustmentBehavior = .never
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
webView.scrollView.contentInsetAdjustmentBehavior = .automatic
}
答案 4 :(得分:0)
我最近刚刚遇到了这个问题,并且能够通过不使用自动布局将Web视图放置在较大视图中来解决此问题,而是对Web视图使用了自动调整大小的蒙版。希望这对某人有帮助。