我试图创建一个属性字符串,但下划线覆盖了我的文本,而不是出现在它后面:
x1c 0d1x的数据
有办法解决吗?我使用以下代码:
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineSpacing = 10.0
let attributes = [NSForegroundColorAttributeName: UIColor.white,
NSUnderlineStyleAttributeName: NSUnderlineStyle.styleThick.rawValue,
NSUnderlineColorAttributeName: UIColor.red,
NSParagraphStyleAttributeName: paragraphStyle]
let attributedString = NSAttributedString(string: "Story", attributes: attributes)
字符串
谢谢你,谢谢
编辑:
要给予更多上下文:
我在放置在.xib文件中的UILabel上显示属性字符串:
view.textLabel.attributedText = attributedString
型
标签的字体如下:系统粗体32.0
我在iPhone 6 - iOS 10.3模拟器上运行代码。
编辑2:
我应该提到,在某些时候,标签可能包含多行文本。这就是numberOfLines设置为0的原因。
编辑3:如果有人遇到这个问题-似乎在iOS 9与10以及UILabel与UITextView上绘制下划线的方式有很大差异。我最终不得不通过子类化NSLayoutManager来自己画下划线。
5条答案
按热度按时间pdsfdshx1#
是的,确实有你所描述的问题。当您使用多行
UILabel
时,它会显示出来,因此不仅要将numberOfLines
设置为0,还要在其中键入多行。示例
字符串
一切看起来都很好。
但是如果你想使用这样的文本:
型
或标签的宽度过短,则:
的数据
所以这种行为的原因当然是
NSAttributedString
中的bug。正如雷达中提到的,有一个解决方案您应该将此属性添加到
NSAttributedString
型
奇迹就会发生。
ct2axkht2#
在我的机器上,在黑色背景的UILabel中显示属性字符串,它的显示效果非常好:
x1c 0d1x的数据
红色粗下划线与文本很好地分开,并被中断以允许“y”的下降部分通过它。
注意不能将UILabel的
font
(在Interface Builder中设置)与其attributedText
合并。您必须在attributedText
中设置 entire 标签的文本格式。所以,我的代码看起来像这样:字符串
(You会注意到我删除了你对段落行距的规定;只有一行,所以这个规定没有增加什么。但是,即使我恢复它,也会得到相同的结果。)
z4bn682m3#
不使用NSAttributedString,你可以使用这个在标签下面用x空格画边框。
字符串
4dbbbstv4#
这就是我对这个问题的解决方案。我认为这是“更干净”和更容易。如果你不明白,就发邮件给我:)
字符串
tnkciper5#
我知道它的迟来的答复,但经过几个小时的搜索,找到了如下修复
字符串