我有一些需要在我的应用中显示的文字。该文本包含需要交互的链接。我在UITextViews
和UILabels
中尝试了一些用于制作可点击链接的解决方案。
UITextView
链接
UITextView
提供了数据检测器,可以接收网址并使其可以点播。 UILabel
使用“Fancy Labels”链接(http://furbo.org/2008/10/07/fancy-uilabels/)
UIButton
来覆盖链接,并且它们不会包含长链接上的文本。最后我决定使用webview。我将文本传递给webview,并围绕它构建一个基本的HTML包装器,所有东西都是hunky-dory。这与Twitter for iPhone(又名Tweetie)使用的方法相同。
我现在唯一的问题是,如果文本太长,webview会剪切溢出并滚动以查看剪切的文本。 其次,如果文字太短,那么webview下面就会有一大片浪费的空间。
与Tweetie不同,我在webview下面有更多内容,我想避免滚动溢出或浪费空间。无论如何,webview都是滚动视图的子视图,因此整个页面的内容可以增长,而不需要滚动子视图。
有没有什么方法可以动态调整webview的大小,以便它根据内容的高度而定?
到目前为止,我尝试了很多东西,似乎没有什么是可靠的解决方案:
sizeToFit
什么都不做(或者更有可能,只是将大小设置为当前帧的大小)。sizeThatFits:
会返回当前大小。NSString
的{{1}}不可行,因为sizeWithFont:constrainedToSize:
和UIWebView
对18的大小有不同的表示。
UIFont
设置为scalesPageToFit
的webView,并且整个页面的字体大小设置为13.5pt(在CSS中)呈现的文本是与大小为NO
的{{1}}大小相同。如果有人能解释我,我会很感激。UILabel
,以防止webView水平滚动长字或URL。因此,webView和UIFont
之间的包装行为完全不同。即使使用word-wrap: break-word;
也不会产生相同的结果。要么没有办法做到这一点,要么我愚蠢而且缺少一些简单的东西。如果有人能提供一些见解,我将非常感激。感谢。
答案 0 :(得分:3)
实际上,您可以使用-sizeThatFits:
进行一些小技巧。有关类似问题,请参阅my response。
答案 1 :(得分:2)
我不相信这是最好的解决方案,但它正在发挥作用。如果有人有任何更好的想法,我会很高兴听到他们。
我最终在webViewDidFinishLoad:
的webView上运行了这个javascript。我有一个div元素包装我的内容称为body,所以我的代码看起来像:
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
NSString *string = [_webView stringByEvaluatingJavaScriptFromString:@"document.getElementById(\"body\").offsetHeight;"];
CGFloat height = [string floatValue] + 8;
CGRect frame = [_webView frame];
frame.size.height = height;
[_webView setFrame:frame];
if ([[self delegate] respondsToSelector:@selector(webViewController:webViewDidResize:)])
{
[[self delegate] webViewController:self webViewDidResize:frame.size];
}
}
由于原始值未考虑边距大小等,我不得不略微填充高度
在我达到高度后,我打电话给我的代表,webview确实调整了大小,以便完成布局。