let label = UILabel()
label.text = "underlined text"
let spacing = 2 // will be added as negative bottom margin for more spacing between label and line
let line = UIView()
line.translatesAutoresizingMaskIntoConstraints = false
line.backgroundColor = label.textColor
label.addSubview(line)
label.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[line]|", metrics: nil, views: ["line":line]))
label.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:[line(1)]-(\(-spacing))-|", metrics: nil, views: ["line":line]))
4条答案
按热度按时间p4tfgftt1#
使用
NSAttributedString
或CoreText无法控制这种行为(除了自己画下划线之外),NSAttributedString也没有这种选项(CoreText hasn't got one, either也是如此)。在苹果系统上,第一个版本(差距)是“预期”行为,因为它是苹果提供的,并在整个系统(以及Safari、TextEdit等应用程序)中使用。
如果你真的,真的想让下划线没有间隙,你需要画一个没有下划线的字符串,然后自己画线(我需要做in one of my projects and I can tell you it's hard;参见this file,搜索“下划线”)。
w6mmgewl2#
我添加了一条线(UIView),高度为1,宽度与label相同,与UILabel的底部对齐。
dsekswqp3#
您可以使用UITextView I在NSLayoutManager中添加自定义NSAttributedStringKey“customUnderline”和swizzling方法drawUnderline。
like that
nue99wik4#
费兰·梅林奇的回答对我最有效。
我把它变成了一个UILabel扩展,我想我会分享它。
}