为啥 UIWebView 不能正确滚动?
Posted
技术标签:
【中文标题】为啥 UIWebView 不能正确滚动?【英文标题】:Why does UIWebView not scroll correctly?为什么 UIWebView 不能正确滚动? 【发布时间】:2014-12-26 07:37:26 【问题描述】:我有一个相当简单的场景,只有一个 UIWebView 从包中加载一个 html 文档。 webView 填充顶部布局指南下方的屏幕,并使用推荐的约束。它有两个奇怪的行为:
它从内容向下滚动开始。您可以在下面的第一张图片中看到这一点。粉色是UIWebView的颜色,html本身是白色的。
webView 的 UIScrollView 本身有些愚蠢,因为(再次:参见图片)内容一直滚动到底部,但滚动条不在 webView 的顶部;它位于内容的顶部。
内容很容易滚动到那个粉红色区域,当内容一直向上滚动时,滚动条位于 UIWebView 的底部。见第二张图片。
我意识到我可以通过编程方式设置 contentOffset,但它只在 webViewDidFinishLoad 函数中有效,然后它会导致可见的跳转,因为 webview 先绘制自己然后滚动,所以这不好。
这里是 html(空格截断):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
<link href="help.css" rel="stylesheet" type="text/css" />
</head>
<body>
<h2>Frequently-asked questions</h2>
</body>
</html>
还有 CSS:
@charset "UTF-8";
body
font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
font-size: 16px;
这里是 ViewController:
class HelpViewController: UIViewController, UIWebViewDelegate
@IBOutlet weak var webView: UIWebView!
override func viewDidLoad()
super.viewDidLoad()
let navController = self.navigationController
navController?.navigationBarHidden = false
override func viewWillAppear(animated: Bool)
loadURL();
func loadURL()
let htmlName = "support";
let url = NSBundle.mainBundle().URLForResource(htmlName, withExtension: "html")
self.webView.delegate = self;
if let goodURL = url
let request = NSURLRequest(URL: goodURL)
self.webView.loadRequest(request)
似乎问题一定与 IB 中的某些东西有关,但我看不出是什么。有什么好主意吗?
提前致谢!
-戴夫
【问题讨论】:
这是webview的布局问题,请在Interface Builder中显示设置 你在滚动视图中有一个 webview 吗?如果是这样,你不需要那个,因为 webview 包含一个它自己的滚动视图,你最终会得到两个滚动视图,我认为在你的情况下不需要。 @JeanLuc:我在滚动视图中没有 webview。 【参考方案1】:所以,在某种程度上,我想我已经想通了。我在这个场景中有一个导航栏。我将 webview 的顶部约束设置为 Top Layout Guide,这是有道理的,因为这是我希望实际 dang webview 顶部所在的位置。但是,出于某种原因,这对我来说似乎不是 kosher,因此我将其更改为绑定到 superview 的顶部(场景的主视图)。
这可行:我可以在半透明导航栏下看到粉红色,但 webview 的实际内容定位正确。
UIWebView 似乎希望调整到整个视图的大小,如果有导航栏,那么它会缩短自己的滚动视图以允许导航栏的大小,无论调整大小是否实际需要/合理.也许我的应用正在做的其他事情正在解决这个问题,但如果没有,我认为这对 UIWebView 来说不是好的行为。
-戴夫
【讨论】:
以上是关于为啥 UIWebView 不能正确滚动?的主要内容,如果未能解决你的问题,请参考以下文章