NSAttributedString текст всегда придерживается снизу с большой lineHeight - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь внедрить дизайн-ярлыки из Sketch, например. Мне нужны стили текста с размером шрифта = 19 и высотой строки = 50. Поэтому я в итоге использовал NSAttributedString с NSMutableParagraphStyle, но остановился из-за проблемы с прикреплением текста к нижней части UILabel

Я уже пытался использовать lineHeightMultiple и lineSpacing, но они не дали мне высоту строки, которую я хотел, поэтому я в итоге использовал minimumLineHeight и maximumLineHeight равные

Вот мой подход к созданию NSAttributedString

    private static func makeAttributedString(
        with attributes: TextAttributes,
        text: String? = nil,
        alignment: NSTextAlignment = .center
    ) -> NSAttributedString {
        let font = UIFont(name: attributes.font.rawValue, size: attributes.fontSize)!

        let paragraph = NSMutableParagraphStyle()
        paragraph.alignment = alignment
        paragraph.paragraphSpacing = attributes.paragraph
        paragraph.minimumLineHeight = attributes.lineHeight // equal 50 in my case
        paragraph.maximumLineHeight = attributes.lineHeight // equal 50 in my case

        let attributes: [NSAttributedStringKey: Any] = [
            NSAttributedStringKey.paragraphStyle: paragraph,
            NSAttributedStringKey.foregroundColor: attributes.textColor,
            NSAttributedStringKey.kern: attributes.kern,
            NSAttributedStringKey.font: font
        ]

        return NSAttributedString(string: text ?? "", attributes: attributes)
    }

Я ожидаю, что результат похож на дизайн

image

но на самом деле получаю

image

Примечание: установка ограничения высоты на 50 неприменима, потому что мне также нужны многострочные метки, но с ними та же ошибка

1 Ответ

0 голосов
/ 11 июля 2019

Похоже, я нашел какой-то обходной путь сам, может быть, это кому-нибудь поможет.

Метод заключается в установке baselineOffset следующим образом:

NSAttributedStringKey.baselineOffset: (attributes.lineHeight - font.lineHeight) / 4

Работает как шарм:

https://i.imgur.com/a2EOf5R.png

...