我正在开发一个将小块HTML加载到多个网页视图中的应用。我希望用户可以选择这个HTML,这样他们就可以复制和粘贴部分HTML。这项工作完全正常,但当内容大于100px
时, 。出于某种原因,如果它更短,则用户无法选择内容。
重现的步骤:
loadHTMLString: "W " * 64, baseURL: nil
。 (在我的屏幕上,这是4行完整的“W”)loadHTMLString: "W " * 65, baseURL: nil
。 (在我的屏幕上,最后一个“W”在第5行)我尝试了很多东西,了解这里发生了什么。我按照相同的步骤操作,但从高度101开始而不是100开始,只需4行即可完美找到。
我认为这可能是iOS中的一个错误?可能?
我正在运行iOS 9.2
,使用Xcode 7.2.1
这里有没有人知道为什么会发生这种情况,或者我是否有任何可以解决这个问题的工作?
答案 0 :(得分:3)
我尝试了一些解决方法,但无济于事。
我找到的唯一解决方法:使用WKWebView
- 它没有此问题。
目前,从iOS 9开始,您无法通过Interface Builder添加WKWebView
。这是因为它不受支持。只要WKWebView
标头将其声明为NS_UNAVAILABLE
,您就无法将其包含在IB中:
- (instancetype)initWithCoder:(NSCoder *)coder NS_UNAVAILABLE;
相反,您可以将其声明为属性,并在viewDidLoad
实现中实例化,如下所示:
self.webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 200, 320, 100)];
答案 1 :(得分:1)
好吧,webview假设加载html代码,但不是纯字符串,这可能会混淆它。如果您在前面添加<!DOCTYPE HTML>
,无论字符串有多短,都可以选择它。
答案 2 :(得分:0)
将Web视图的scalesPageToFit
设置为true似乎可以解决问题,但只有在高度为100的情况下才会解决问题。如果99或更低,则问题仍然存在。但是看到scalesPageToFit
和这个特征之间的关系以及高度为100的情况很奇怪。看看101,100,99的高度,这似乎是某种浮点计算问题。绝对是一个错误。
经过更多调查,我发现如果你将高度设置为100.5,那么内容是可选择的。看起来像Web视图实现中的某种四舍五入问题。
当我查看网页视图的滚动视图的contentSize时,似乎当scrollview contentSize超过100时,选择工作正常。因此,如果您处理webviewDidFinishLoad
并在那里检查contentSize是否&lt; 100然后你可以通过附加<br>
来重新加载字符串。只要它小于100,你继续加载每次加载<br>
到加载的字符串。这应该适合你。
func webViewDidFinishLoad(webView: UIWebView) {
print(webview.scrollView.contentSize)
var content = webview.stringByEvaluatingJavaScriptFromString("document.body.innerHTML")
if content != nil && webview.scrollView.contentSize.height <= 100 {
content! += "<br>"
webview.loadHTMLString(content!, baseURL: nil)
}
}