我尝试为UITextView
添加下划线样式,但未应用。如果我使用" shadow" (取消注释阴影样式和注释下划线样式)我可以看到它,但由于某种原因没有应用下划线。我使用" Courier New"字体。
- (void) addDiagHighlighting: (NSMutableAttributedString*)attrString start:(int)start end:(int)end severity:(int)severity {
// ignore diags that are out of bounds
if (start > attrString.length || end > attrString.length)
return;
NSRange range = NSMakeRange(start, end - start);
UIColor *diagColor = [self getSeverityColor: severity];
// shadow
// NSShadow *shadow = [[NSShadow alloc] init];
// [shadow setShadowColor: diagColor];
// [shadow setShadowOffset: CGSizeMake (1.0, 1.0)];
// [shadow setShadowBlurRadius: 1.0];
// [attrString addAttribute:NSShadowAttributeName
// value:shadow
// range:range];
// underline
[attrString addAttributes:@{
NSUnderlineColorAttributeName : diagColor, // color
NSUnderlineStyleAttributeName : @(NSUnderlinePatternSolid) // style
}
range:range];
}
我可以更改添加属性以添加阴影和下划线,我可以看到阴影,但仍然没有下划线:
// shadow + underline
[attrString addAttributes:@{
NSShadowAttributeName : shadow, // shadow
NSUnderlineColorAttributeName : diagColor, // color
NSUnderlineStyleAttributeName : @(NSUnderlinePatternSolid) // style
}
range:range];
答案 0 :(得分:5)
您需要与NSUnderlinePattern
或NSUnderlineStyle
进行操作才能使其正常运行(see Apple documentation here)
试试这个:
[attrString addAttributes:@{
NSShadowAttributeName : shadow, // shadow
NSUnderlineColorAttributeName : diagColor, // color
NSUnderlineStyleAttributeName : @(NSUnderlineStyleSingle | NSUnderlinePatternSolid) // style
}
range:range];
或点点......
[attrString addAttributes:@{
NSShadowAttributeName : shadow, // shadow
NSUnderlineColorAttributeName : diagColor, // color
NSUnderlineStyleAttributeName : @(NSUnderlineStyleSingle | NSUnderlinePatternDot) // style
}
range:range];
答案 1 :(得分:3)
Apple开发人员文档说明了NSUnderlineStyle
:
将样式,模式和可选的单词掩码一起进行OR运算,以生成
underlineStyle
和strikethroughStyle
的值。
因此,使用Swift 4.2和iOS 12,您可以使用bitwise OR operator(|
)为NSAttributedString.Key.underlineStyle
属性设置样式和模式。
以下操场代码显示如何为NSUnderlineStyle.thick
实例设置NSUnderlineStyle.patternDot
和NSAttributedString
属性:
import UIKit
import PlaygroundSupport
let attributes = [NSAttributedString.Key.underlineStyle : (NSUnderlineStyle.thick.rawValue | NSUnderlineStyle.patternDot.rawValue)]
let attributedString = NSAttributedString(string: "Some text", attributes: attributes)
let label = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 40))
label.backgroundColor = .white
label.attributedText = attributedString
PlaygroundPage.current.liveView = label