ios - 根据内容字体大小动态调整 UIWebView 的大小

标签 ios iphone uiwebview uikit font-size

我有一些文本需要在我的应用中显示。文本包含需要交互的链接。我已经尝试了一些在 UITextViewsUILabels 中创建可点击链接的解决方案。

  1. UITextView 链接

    • UITextView 提供数据检测器,可以获取 URL 并使其可点击。
    • 对我来说无法使用,因为该链接只能在 Safari 中从外部打开,无法控制并使用该链接执行我想做的事情。
  2. 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: 无论如何都会返回其当前大小。
  • NSStringsizeWithFont:constrainedToSize: 不可行,因为 UIWebViewUIFont 有不同的表示18号是什么尺寸。
    • 只是详细说明这一点。在我的测试中,我发现 webView 的 scaleFactor 为 1.0 且 scalesPageToFit 设置为 NO 并且整个页面的字体大小设置为 13.5pt(在 CSS 中) 呈现与 UILabel 大小相同且 UIFont 大小为 18 的文本。如果有人能向我解释,我将不胜感激。
  • 此外,在 webView 中,我使用 CSS 属性 word-wrap: break-word; 以防止 webView 水平滚动长词或 URL。因此,webView 和 UILineBreakModeWordWrap 之间的换行行为完全不同。即使使用 UILineBreakModeCharacterWrap 也不会产生相同的结果。

要么没有办法做到这一点,要么我太笨了,漏掉了一些简单的东西。如果有人可以提供一些见解,我将不胜感激。谢谢。

最佳答案

实际上,您可以通过一些小技巧来使用-sizeThatFits:。参见 my response类似的问题。

关于ios - 根据内容字体大小动态调整 UIWebView 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3582994/

相关文章:

iphone - 关闭模态视图时在 IOS 5 中崩溃

ios - 当 UIView 直接覆盖在它上面时,如何处理 UIWebView 中的链接?

ios - 将 youtube 视频嵌入 UIView/UIWebView

ios - 如何使用 Swift 删除 Firebase 上超过 30 分钟的数据?

ios - UITableView 项目被突出显示,然后被取消选择 - Swift

ios - 找不到支持键盘 type 4 的键盘 iPhone-PortraitChoco-NumberPad

iphone - 如何设置 View 的背景图像?

ios - 如何在运行时通过 Selector 在 Swift 中调用泛型函数?

ios - 自定义文本字段不符合约束

iphone - uiwebview(iphone)上的自定义按钮