【问题标题】:UITextView or UILabel with html hyperlinks带有 html 超链接的 UITextView 或 UILabel
【发布时间】:2020-05-02 08:34:21
【问题描述】:

我需要带有多个初始链接的文本。 在 Android 中,我只是使用了简单的 html 字符串 示例:

"<a href=\"https://www.link.com\">Photo</a> The owner / <a href=\"https://creativecommons.org/licenses/by-sa/3.0/deed.en\">CC BY-SA 3.0</a>"

只有当我点击单词对应的链接时它才有效。

我花了一天时间并没有设法找到简单的 ios 解决方案。 我尝试使用 UITextView 的扩展名:

extension UITextView {
func setHTMLFromString(text: String) {
    let modifiedFont = NSString(format:"<span style=\"font-family: \(self.font!.fontName); font-size: \(self.font!.pointSize)\">%@</span>" as NSString, text)



    let paragraph = NSMutableParagraphStyle()
    paragraph.alignment = .center


    let attrStr = try! NSAttributedString(
        data: modifiedFont.data(using: String.Encoding.unicode.rawValue, allowLossyConversion: true)!,
        options: [NSAttributedString.DocumentReadingOptionKey.documentType:NSAttributedString.DocumentType.html, NSAttributedString.DocumentReadingOptionKey.characterEncoding: String.Encoding.utf8.rawValue],
        documentAttributes: nil)

    self.attributedText = attrStr
}

但是链接不仅在我点击超链接世界时有效,而且在我点击它们之间的简单文本时也有效。而且我也没有设法在 textView(center) 中对齐此文本。

有人知道正确的方法吗?

【问题讨论】:

  • 我已经收集了很多关于这个主题的优秀答案,并在 GithHub 上创建了一个小 blob,集成和使用非常简单。我不想讲太多细节,因为在上面的答案中已经对它们进行了彻底的解释。我的解决方案是基于这些答案。 HyperlinkedUILabel

标签: ios hyperlink uitextview nsattributedstring


【解决方案1】:

目前找不到文档,但仔细观察表明:

由于用手指点击不如用鼠标指针点击精确,因此链接会获得比文本本身更大的“点击区域”。

以您的示例-“照片所有者/CC BY-SA 3.0”-我可以点击ow 字符而不触发任何一个链接。如果我点击The,它会触发照片链接,如果我点击new /,它会触发该链接。


编辑

文本居中的一个选项...

在你的扩展中,改变

let modifiedFont = NSString(format:"<span style=\"font-family: \(self.font!.fontName); font-size: \(self.font!.pointSize)\">%@</span>" as NSString, text)

let modifiedFont = NSString(format:"<p style=\"text-align:center\"><span style=\"font-family: \(self.font!.fontName); font-size: \(self.font!.pointSize)\">%@</span></p>" as NSString, text)

添加了&lt;p style=... 标签。

【讨论】:

  • 感谢您的回答。也许你知道如何在我的扩展中对齐(中心)?
  • @Dima - 很高兴它对你有用。为了其他遇到您的问题的人的利益,如果这回答了它,您应该将答案标记为已接受。
猜你喜欢
  • 2017-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多