Преобразовать высоту линии эскиза в свойство ios line 'height кратно'
3 ответа
@bbjay поставил меня на верный путь.
Если вы хотите получить точный результат Sketch, формула:
paragraphStyle .lineSpacing = sketchLineHeight - font.lineHeight
При условии, что шрифт был дан sketchFontSize
Я нашел следующую формулу, чтобы хорошо работать для меня. Он преобразует высоту линии эскиза в межстрочный интервал iOS:
lineSpacing = sketchLineHeight - sketchFontSize - (font.lineHeight - font.pointSize)
В коде для вашего случая это будет:
let font = UIFont.systemFont(ofSize: 18) // or whatever font you use
textLabel.font = font
let attributedString = NSMutableAttributedString(string: "your text")
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineSpacing = 22 - 18 - (font.lineHeight - font.pointSize)
attributedString.addAttribute(.paragraphStyle, value: paragraphStyle, range: NSMakeRange(0, attributedString.length))
textLabel.attributedText = attributedString
Высота линии исходит из CSS, поэтому у вашего дизайнера должен быть опыт веб-дизайнера. На мобильных платформах мы указываем не высоту строки, а межстрочный интервал.
В целом NSMutableParagraphStyle предлагает возможности для изменения многострочных меток для iOS.
NSMutableParagraphStyle
имеет свойство MaximumLineHeight, но оно будет устанавливать максимальную высоту строки только на определенное значение, если содержание метки будет превышать определенное значение.
Чтобы настроить это в IB, вам нужно добавить метку и изменить Text
собственность на Attributed
, Затем щелкните значок стиля абзаца и установите межстрочный интервал для метки. Глядя на дизайн, это примерно 2 точки межстрочного интервала, что вам нужно. Вы можете либо попросить своего дизайнера предоставить вам атрибут межстрочного интервала, либо попытаться найти правильное значение межстрочного интервала путем случайного опробования различных значений.