Вопрос:

Как установить выравнивание в NSMutableAttributedString iOS Swift 3

ios swift alignment nsmutableattributedstring

1430 просмотра

1 ответ

2848 Репутация автора

Я хочу изменить выравнивание моего HTML в iOS Swift 3 Xcode 8.3 .
Все работает правильно, но я не знаю о выравнивании атрибуты.
Мой код такой:

extension String {
    func htmlAttributedString() -> NSAttributedString? {
        guard let data = self.data(using: String.Encoding.utf16, allowLossyConversion: false) else { return nil }

        let style = NSMutableParagraphStyle()
        style.alignment = NSTextAlignment.center


        guard let html = try? NSMutableAttributedString(
            data: data,
            options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,NSTextAlignment:.center],
            documentAttributes:nil) else { return nil }


        return html
    }
}
Автор: reza_khalafi Источник Размещён: 17.04.2017 07:04

Ответы (1)


4 плюса

19471 Репутация автора

Решение

Причиной получения ошибки является то, что optionsпараметр является словарем типа:, [String : Any]передача NSDocumentTypeDocumentAttribute(String) и NSTextAlignment(Int) недопустима (словари строго типизированы).

Решение было бы использовать NSMutableParagraphStyleи добавить его в качестве опции; Вы уже объявили один и установите его выравнивание на .center, но вы не используете его!

Вы должны добавить его с NSParagraphStyleAttributeNameключом (вместо NSTextAlignment) следующим образом:

extension String {
    func htmlAttributedString() -> NSAttributedString? {
        guard let data = self.data(using: String.Encoding.utf16, allowLossyConversion: false) else { return nil }

        let style = NSMutableParagraphStyle()
        style.alignment = NSTextAlignment.center

        guard let html = try? NSMutableAttributedString(
            data: data,
            options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
                      NSParagraphStyleAttributeName: style],

            documentAttributes:nil) else { return nil }

        return html
    }
}

Обратите внимание, что NSParagraphStyleAttributeNameтипом данных является String, что означает, что тип данных параметров dictionaryбудет -legally- [String : Any].

Автор: Ahmad F Размещён: 17.04.2017 07:35
Вопросы из категории :
32x32