UITextView или UILabel с html гиперссылками - PullRequest
0 голосов
/ 15 января 2020

Мне нужен текст с несколькими ленточными ссылками init. В 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 (по центру).

Кто-нибудь знает правильный путь?

1 Ответ

1 голос
/ 15 января 2020

В данный момент не удается найти документацию, но при ближайшем наблюдении указывается:

Поскольку касание пальцем не так точно, как нажатие указателем мыши, ссылка получает большую «область касания», чем сам текст.

На вашем примере - "Владелец фотографии / 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)

, добавьте тег <p style=....

...