Dan*_*ser 5 underline nsattributedstring ios textkit
我正在尝试向NSAttributedString(在iOS7 + / TextKit上)添加点划线样式。当然,我尝试了内置功能NSUnderlinePatternDot:
NSString *string = self.label.text;
NSRange underlineRange = [string rangeOfString:@"consetetur sadipscing elitr"];
NSMutableAttributedString *attString = [[NSMutableAttributedString alloc] initWithString:string];
[attString addAttributes:@{NSUnderlineStyleAttributeName: @(NSUnderlineStyleSingle | NSUnderlinePatternDot)} range:underlineRange];
self.label.attributedText = attString;
Run Code Online (Sandbox Code Playgroud)
但是,由此产生的样式实际上是虚线而不是虚线:

我是否在这里缺少明显的东西(NSUnderlinePatternReallyDotted?;)?或者也许可以自定义线点图案?
小智 0
我知道这是一个 2 年前的故事,但也许它会帮助面临同样问题的人,就像我上周所做的那样。\n我的解决方法是子类化UITextView,添加一个子视图(虚线容器)并使用 textView\xe2\x80 \x99slayoutManager 方法enumerateLineFragmentsForGlyphRange来获取行数及其帧数。\n知道了线\xe2\x80\x99s 框架,我计算了y我想要的点的位置。因此,我创建了一个视图(在其中画点的 lineView),将其宽度设置clipsToBounds为YEStextView 的宽度,然后将其作为子视图添加到该位置的linesContainer 中y。\n之后,我将 lineView\xe2\x80\x99s 设置width为 所返回的enumerateLineFragmentsForGlyphRange值。\n对于多行,采用相同的方法:更新帧、添加新行或根据内容删除enumerateLineFragmentsForGlyphRange返回的内容删除。\n这个方法被调用textViewDidChange。\n以下是获取行数组及其框架的代码
NSLayoutManager *layoutManager = [self layoutManager];\n[layoutManager enumerateLineFragmentsForGlyphRange:NSMakeRange(0, [layoutManager numberOfGlyphs]) \n usingBlock:^(CGRect rect, CGRect usedRect, NSTextContainer *textContainer, NSRange glyphRange, BOOL *stop) {\n [linesFramesArray addObject:NSStringFromCGRect(usedRect)];\n }\n];\nRun Code Online (Sandbox Code Playgroud)\n