我有一些文本需要在我的应用中显示。文本包含需要交互的链接。我已经尝试了一些在 UITextViews
和 UILabels
中创建可点击链接的解决方案。
UITextView
链接UITextView
提供数据检测器,可以获取 URL 并使其可点击。- 对我来说无法使用,因为该链接只能在 Safari 中从外部打开,无法控制并使用该链接执行我想做的事情。
UILabel
使用“花式标签”的链接 (http://furbo.org/2008/10/07/fancy-uilabels/)- 几乎是完美的解决方案,提供了链接检测功能,并为用户提供了一种内联查看和点击链接的方法,让我可以完全控制在按下链接时如何处理链接。
- 目前无法使用,因为该实现使用
UIButton
来覆盖链接,并且它们不会在长链接上用文本换行。
最后我决定使用 WebView 。我将文本传递到 webview 并围绕它构建一个基本的 HTML 包装器,一切都很简单。这与 iPhone 版 Twitter(又名 Tweetie)使用的方法相同。
我现在唯一的问题是,如果文本太长,webview 会剪掉溢出部分并滚动查看剪下的文本。 其次,如果文本太短,则在 webview 下方会浪费大量空间。
与 Tweetie 不同,我在 webview 下有更多内容,我想避免滚动溢出或浪费空间。 webview 无论如何都是 ScrollView 的 subview ,因此整个页面的内容可以在其 subview 不需要滚动的情况下增长。
有什么方法可以动态调整 webview 的大小,使其根据内容调整到合适的高度?
到目前为止我已经尝试了很多东西,似乎没有什么是可靠的解决方案:
sizeToFit
什么都不做(或者更可能的是,只是将大小设置为当前帧的大小)。sizeThatFits:
无论如何都会返回其当前大小。NSString
的sizeWithFont:constrainedToSize:
不可行,因为UIWebView
和UIFont
有不同的表示18号是什么尺寸。- 只是详细说明这一点。在我的测试中,我发现 webView 的 scaleFactor 为 1.0 且
scalesPageToFit
设置为NO
并且整个页面的字体大小设置为 13.5pt(在 CSS 中) 呈现与UILabel
大小相同且UIFont
大小为 18 的文本。如果有人能向我解释,我将不胜感激。
- 只是详细说明这一点。在我的测试中,我发现 webView 的 scaleFactor 为 1.0 且
- 此外,在 webView 中,我使用 CSS 属性
word-wrap: break-word;
以防止 webView 水平滚动长词或 URL。因此,webView 和UILineBreakModeWordWrap
之间的换行行为完全不同。即使使用UILineBreakModeCharacterWrap
也不会产生相同的结果。
要么没有办法做到这一点,要么我太笨了,漏掉了一些简单的东西。如果有人可以提供一些见解,我将不胜感激。谢谢。
最佳答案
实际上,您可以通过一些小技巧来使用-sizeThatFits:
。参见 my response类似的问题。
关于ios - 根据内容字体大小动态调整 UIWebView 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3582994/