【发布时间】:2011-04-04 17:21:17
【问题描述】:
我有一些文本需要在我的应用程序中显示。文本包含需要交互的链接。我尝试了一些在UITextViews 和UILabels 中创建可点击链接的解决方案。
-
UITextView链接-
UITextView提供数据检测器,可以检测 URL 并使它们可点击。 - 对我来说无法使用,因为该链接只会在 Safari 外部打开,无法控制并使用该链接做我想做的事。
-
-
UILabel链接使用“花式标签”(http://furbo.org/2008/10/07/fancy-uilabels/)- 几乎是完美的解决方案,提供链接检测和一种让用户在线查看和点击链接的方式,让我完全控制按下链接时如何处理。
- 目前无法使用,因为该实现使用
UIButtons 覆盖链接,并且它们不会用长链接上的文本换行。
最后我决定使用 webview。我将文本传递到 webview 并围绕它构建一个基本的 HTML 包装器,一切都是 hunky-dory。这与 iPhone 版 Twitter(又名 Tweetie)使用的方法相同。
我现在唯一的问题是,如果文本太长,webview 会剪辑溢出并滚动以查看剪辑的文本。 其次,如果文字太短,那么在webview下面会浪费很大的空间。
与 Tweetie 不同,我在 webview 下方有更多内容,我想避免滚动溢出或浪费空间。无论如何,webview 是滚动视图的子视图,因此整个页面的内容可以增长,而其子视图无需滚动。
有什么方法可以动态调整 webview 的大小,使其根据内容的高度恰到好处?
到目前为止,我已经尝试了很多东西,似乎没有什么是可靠的解决方案:
-
sizeToFit什么都不做(或者更有可能只是将大小设置为当前帧的大小)。 -
sizeThatFits:无论如何都会返回其当前大小。 -
NSString的sizeWithFont:constrainedToSize:不可行,因为UIWebView和UIFont对 18 的大小有不同的表示。- 只是为了详细说明这一点。在我的测试中,我发现 scaleFactor 为 1.0 且
scalesPageToFit设置为NO且整个页面的字体大小设置为 13.5pt(在 CSS 中)的 webView 呈现的文本大小与UILabel和UIFont大小为 18。如果有人能解释一下,我将不胜感激。
- 只是为了详细说明这一点。在我的测试中,我发现 scaleFactor 为 1.0 且
- 另外,在 webView 中,我使用 CSS 属性
word-wrap: break-word;以防止 webView 水平滚动长字或 URL。因此,webView 和UILineBreakModeWordWrap之间的包装行为完全不同。即使使用UILineBreakModeCharacterWrap也不会产生相同的结果。
要么没有办法做到这一点,要么我很愚蠢,错过了一些简单的东西。如果有人能提供一些见解,我将不胜感激。谢谢。
【问题讨论】:
标签: ios iphone uiwebview uikit font-size