【问题标题】:prefersLargeTtitles Collapses Automatically after Loading WKWebView WebpageprefersLargeTtitles 加载 WKWebView 网页后自动折叠
【发布时间】:2018-08-04 15:19:27
【问题描述】:

在 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 中 Safe Area 之后的第一个视图。

【问题讨论】:

  • 你最终做了什么来解决这个问题?

标签: ios swift xcode wkwebview preferslargetitles


【解决方案1】:

我遇到了同样的问题并使用此解决方法解决了它。

override func viewDidLoad() {
    webView.navigationDelegate = self
    webView.scrollView.contentInsetAdjustmentBehavior = .never
}

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    webView.scrollView.contentInsetAdjustmentBehavior = .automatic
}

【讨论】:

    【解决方案2】:

    当您的可滚动视图(UITableView、UICollectionView、UIWebView 等)不是第一个视图时,通常会发生这种情况。

    请检查您在 Main.storyboard 中的查看顺序。适当的顺序应该是这样的: 1- 安全区 2 - 您的网络视图 3 - 其他视图...

    如果不行,尝试使用scrollViewDidScroll方法解决,根据contentOffset.y改变大导航栏的显示方式

    【讨论】:

    • 感谢您的帮助!我确实将 Web 视图作为安全区域之后的第一个视图。我会考虑你的其他建议!
    • @Tobonaut 这不是一个可行的解决方案吗?你有什么问题?
    • @Oliver 不,它不起作用。我有同样的设置。我的解决方法是(是的,这有点 hacky)通过使用 scrollview 委托来重置 web 视图的内部滚动视图的内容偏移量,直到 webview 委托引发完成的方法。
    • @Tobonaut 我还没有找到解决办法。 :( 我采取了删除大标题并使用较小的居中标题的方法。
    【解决方案3】:

    我可以根据 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)
        }
    }
    

    【讨论】:

      【解决方案4】:

      我最近自己也遇到了这个问题,并且能够通过不使用自动布局将 Web 视图定位在较大的视图中而是使用 Web 视图的自动调整大小掩码来解决该问题。希望这对某人有所帮助。

      【讨论】:

      • 哇,这实际上对我有用,而所有其他黑客都没有。谢谢!
      【解决方案5】:

      以下内容对我有用(抱歉,它在目标 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;
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2011-08-23
        • 2014-05-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多