LayoutKit
LayoutKit copied to clipboard
Wrong LabelLayout height when using attributed string with kern and line height
For some reasons setting both kern and line height of an attributed string makes boundingRect
to return wrong height if the string can fit only one line.
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineSpacing = 100
let text = NSMutableAttributedString(
string: "test",
attributes: [NSAttributedStringKey.paragraphStyle : paragraphStyle,
NSAttributedStringKey.kern : 0.1,
NSAttributedStringKey.font : UIFont.systemFont(ofSize: 17)])
let size = text.boundingRect(with: CGSize(width: 1000, height: 1000),
options: [.usesLineFragmentOrigin],
context: nil).size
Here the size
is (29.59384765625, 120.287109375)
which seems fine for width but the height is wrong (maybe is the real height + the line height).
If the text goes multilines then boundingRect
returns correct height.
Also removing the kern
attribute or setting it to 0 also fixes the problem.
I can reproduce this as well. Removing the kern spacing resolves the issue, but I want to use custom kerning.
This actually is a bug with NSAttriubutedString
. You can see more https://stackoverflow.com/questions/48811307/wrong-height-for-uilabel-when-using-custom-linespacing-and-kern.