我在我的应用中使用Apple TextKit IntroToTextKitDemo2013 示例代码。
以下是示例代码link
它会动态改变 UITextView AttributedString 的颜色,如果它是' Alice'或者' Rabbit'
当我进入"#"符号它如图所示工作正常,但当我进入"#"在表情符号图标之后,它会在表情符号和"#"之后添加空格。符号。 我使用的是iOS 8.3
这是我的代码
//ControllerCode
@property (nonatomic, retain) TKDInteractiveTextColoringTextStorage *textStorage;
-(void)viewDidLoad
{
[super viewDidLoad];
// our auto layout views use a design spec that calls for
// 8 pts on each side except the bottom
// since we scroll at the top here, only inset the sides
CGRect newTextViewRect = CGRectInset(self.view.bounds, 8., 0.);
self.textStorage = [[TKDInteractiveTextColoringTextStorage alloc] init];
NSLayoutManager *layoutManager = [[NSLayoutManager alloc] init];
NSTextContainer *container = [[NSTextContainer alloc] initWithSize:CGSizeMake(newTextViewRect.size.width, CGFLOAT_MAX)];
container.widthTracksTextView = YES;
[layoutManager addTextContainer:container];
[_textStorage addLayoutManager:layoutManager];
UITextView *newTextView = [[UITextView alloc] initWithFrame:newTextViewRect textContainer:container];
newTextView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
newTextView.scrollEnabled = YES;
newTextView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag;
[self.view addSubview:newTextView];
self.textView = newTextView;
self.textStorage.tokens = @{ @"Alice" : @{ NSForegroundColorAttributeName : [UIColor redColor] },
@"Rabbit" : @{ NSForegroundColorAttributeName : [UIColor orangeColor] },
TKDDefaultTokenName : @{ NSForegroundColorAttributeName : [UIColor blackColor] } };
}
-(void)setDemo:(TKDDemo *)demo
{
[super setDemo:demo];
(void)[self view];
[_textStorage beginEditing];
[_textStorage setAttributedString:self.demo.attributedText];
[_textStorage endEditing];
}
答案 0 :(得分:1)
有类似的问题,将Font添加到属性字符串并且可以正常使用
[attributedString addAttribute:NSFontAttributeName
value:[UIFont fontWithName:@"ProximaNova-Regular" size:16.0]
range:NSMakeRange(0, [self.capTextView.text length])];
答案 1 :(得分:1)
TextKit不能很好地处理它。不同的行高度来自不同字体的指标。英文文本在iOS 10上有“SFUIText”,在表情符号上有“AppleColorEmojiUI”。
一种可能的方式是调用lineHeight
和其他UIFont方法,返回系统默认字体的值。或者通过实现NSLayoutMangerDelegate手动控制行rects。
Neat来解决此问题。