NSAttributedString:未应用下划线

4nt*_*ine 3 underline nsattributedstring ios

我正在尝试添加下划线样式UITextView,但它没有应用.如果我使用"阴影"(取消注释阴影样式和注释下划线样式)我可以看到它,但由于某种原因没有应用下划线.我使用"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];
}
Run Code Online (Sandbox Code Playgroud)

我可以更改添加属性以添加阴影和下划线,我可以看到阴影,但仍然没有下划线:

// shadow + underline
[attrString addAttributes:@{
                            NSShadowAttributeName : shadow, // shadow
                            NSUnderlineColorAttributeName : diagColor, // color
                            NSUnderlineStyleAttributeName : @(NSUnderlinePatternSolid) // style
                            }
                   range:range];
Run Code Online (Sandbox Code Playgroud)

小智 5

您需要或NSUnderlinePatternNSUnderlineStyle得到它的工作(见苹果文档在这里)

试试这个:

[attrString addAttributes:@{
                        NSShadowAttributeName : shadow, // shadow
                        NSUnderlineColorAttributeName : diagColor, // color
                        NSUnderlineStyleAttributeName : @(NSUnderlineStyleSingle | NSUnderlinePatternSolid) // style
                        }
               range:range];
Run Code Online (Sandbox Code Playgroud)

或点点......

[attrString addAttributes:@{
                        NSShadowAttributeName : shadow, // shadow
                        NSUnderlineColorAttributeName : diagColor, // color
                        NSUnderlineStyleAttributeName : @(NSUnderlineStyleSingle | NSUnderlinePatternDot) // style
                        }
               range:range];
Run Code Online (Sandbox Code Playgroud)


Ima*_*tit 5

Apple 开发者文档说明了NSUnderlineStyle

样式,图案,和任选地通过字掩码逻辑或运算,以产生用于值underlineStylestrikethroughStyle

因此,在 Swift 5 和 iOS 12.3 中,您可以使用按位 OR 运算符( |) 为NSAttributedString.Key.underlineStyle属性设置样式和模式。


以下 Playground 示例代码显示了如何为实例设置 NSUnderlineStyle.thickNSUnderlineStyle.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
Run Code Online (Sandbox Code Playgroud)