UITextView 在检测到操作时会更改字体

4

我已经寻找了一段时间来解决这个问题,但似乎没有人遇到类似的问题。基本上,我有多个UITextView,用于从某些EKEvent.notes中检测地址、网址、电话号码等(可以通过UIDataDetectorTypeAll来检测的任何内容)。然后,我将这些UITextView添加为UIScrollView的子视图。

现在,由于某种原因,一旦UITextView检测到地址或电话号码并变为可操作目标,它就会随机以2倍于指定字体的字体绘制!我设置了测试,只需在点击时重新绘制我的视图即可。当UITextView最初添加到视图中时,我可以看到正确文本的黑色字体。然后它进行检测,成为可操作目标。有时它保持正确大小,有时它绘制为2x字体(但仍在正确的框架中,因此它被剪切)。

这非常简单明了,以下是我的代码。所有变量都是正确的值,框架也是正确的,文本也是正确的,一切都是正确的,约50%的时间它会绘制正确。只是另外50%的时间它似乎会变成2倍字体!非常感谢您的帮助!

UITextView *locationTextView = [[UITextView alloc] init];
locationTextView.dataDetectorTypes = UIDataDetectorTypeAll;
locationTextView.text = location;
locationTextView.font = [UIFont fontWithName:@"AvenirNext-Regular" size:17];
locationTextView.editable = NO;
locationTextView.userInteractionEnabled = YES;
locationTextView.contentInset = UIEdgeInsetsMake(-8,-8,-8,-8);
locationTextView.frame =CGRectMake(kBufferLeft, daySize.height, kBufferDayViewTextWidth, locationSize.height);
[scrollView addSubview:locationTextView];

正确示例: http://i.imgur.com/3pJ43kj.jpg

错误示例: http://i.imgur.com/DLq4gco.jpg

(目前还不能发布图片,抱歉。)

同样的代码产生了两种效果。感谢您的时间。

祝好!

编辑: 我选择使用TTTAttributedLabels解决这个问题。

github.com/mattt/TTTAttributedLabel

2个回答

1
您可以在<UITextField>的代理中设置字体。
-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 

{ 
  locationTextView.font = [UIFont fontWithName:@"AvenirNext-Regular" size:17];
}

0

我遇到了同样的问题,因为我使用了自定义的换行方式(layoutManager:shouldBreakLineByWordBeforeCharacterAtIndex:)。必须禁用它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接