首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在更改WKScrollView帧高后删除WKWebview中的空白?

如何在更改WKScrollView帧高后删除WKWebview中的空白?
EN

Stack Overflow用户
提问于 2021-12-30 11:27:24
回答 1查看 309关注 0票数 0

如何在更改WKWebview的帧高后删除空白区域?

当键盘出现时,我想要改变webview的高度,但是在帧高改变之后,HTML主体下面有一个额外的空间。这个额外空白区域的高度大约是键盘的高度。

下面是代码片段:

代码语言:javascript
运行
复制
NotificationCenter.default.rx
.notification(UIApplication.keyboardDidShowNotification)
.subscribe(onNext: { [weak self] keyboardConfig in
    if let userInfo = keyboardConfig.userInfo{
       let keyboardBounds = (userInfo["UIKeyboardFrameEndUserInfoKey"] as! NSValue).cgRectValue;
                
       self?.webView.snp.remakeConstraints({ make in
           make.left.right.top.equalToSuperview();
           /// remake from screen height to below height.
           make.height.equalTo(UIScreen.main.bounds.size.height - keyboardBounds.size.height);
       });
    }
});

EN

回答 1

Stack Overflow用户

发布于 2021-12-31 07:31:44

最后,我仍然不知道如何删除这个额外的空白区域,但我想出了一个解决办法。

因为WKScrollViewUIScrollView的子类,所以UIScrollView Delegate也适用于WKScrollView

因此,contentOffset可以在UIScrollView scrollViewDidScroll委托方法中强制重新分配。下面提供了代码片段。

代码语言:javascript
运行
复制
/// Change webview frame when keyboard appear.
NotificationCenter.default.rx
.notification(UIApplication.keyboardDidShowNotification)
.subscribe(onNext: { [weak self] keyboardConfig in
    if let userInfo = keyboardConfig.userInfo, let this = self {
        let keyboardBounds = (userInfo["UIKeyboardFrameEndUserInfoKey"] as! NSValue).cgRectValue;
        this.webView.snp.remakeConstraints({ make in
            make.left.right.top.equalToSuperview();
            /// remake from screen height to below height.
            make.height.equalTo(UIScreen.main.bounds.size.height - keyboardBounds.size.height);
        });
        let originalOffset = this.webView.scrollView.contentOffset;
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) {
            this.webView.scrollView.contentOffset = originalOffset;
        }
    }
});
代码语言:javascript
运行
复制
/// Force reset contentOffset when the contentOffset is out of HTML Body
extension YourWebviewVC: UIScrollViewDelegate{
    internal func scrollViewDidScroll(_ scrollView: UIScrollView) {
        self.adjustWebviewOffsetFor(scrollView);
    }
    
    private func adjustWebviewOffsetFor(_ scrollView: UIScrollView, animated: Bool = false){
        let currentY = scrollView.contentOffset.y + scrollView.frame.height;
        if currentY > scrollView.contentSize.height{
            let maxOffset = scrollView.contentSize.height - scrollView.frame.height;
            scrollView.setContentOffset(CGPoint(x: 0, y: maxOffset), animated: animated);
        }
    }
}
代码语言:javascript
运行
复制
/// Don't forgot set webview scroolView's delegate, for example
self.webView.scrollView.delegate = self;
self.webView.scrollView.showsVerticalScrollIndicator = false;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70530990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档