我希望在UITextView
中删除已删除的文字。
因为我必须减少UITextView
,当'\ n'删除时。
但是,shouldChangeTextInRange
委托方法只返回最后一个字符串。
所以,例如
UITextView.text = @"ABCD\nEFG";
用户删除文字为@"D\nEFG"
。
然后,返回的文本不是'\ n'。所以我不知道是否应该减少行号。帮助我!
答案 0 :(得分:0)
- (void)textViewDidChange:(UITextView *)textView
{
CGFloat fixedWidth = textView.frame.size.width;
CGSize newSize = [textView sizeThatFits:CGSizeMake(fixedWidth, MAXFLOAT)];
CGRect newFrame = textView.frame;
newFrame.size = CGSizeMake(fmaxf(newSize.width, fixedWidth), newSize.height);
textView.frame = newFrame;
}
使用以下代码,您可以更改UITextView的高度 取决于固定宽度(它适用于iOS 7和之前的版本):
- (CGFloat)textViewHeightForAttributedText:(NSAttributedString *)text andWidth:(CGFloat)width
{
UITextView *textView = [[UITextView alloc] init];
[textView setAttributedText:text];
CGSize size = [textView sizeThatFits:CGSizeMake(width, FLT_MAX)];
return size.height;
}
使用此功能,您将获取NSAttributedString和固定宽度以返回所需的高度。 如果您想根据具有特定字体的文本计算框架,则需要使用以下代码:
- (CGSize)text:(NSString *)text sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size
{
if ([text respondsToSelector:@selector(boundingRectWithSize:options:attributes:context:)])
{
CGRect frame = [text boundingRectWithSize:size
options:(NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading)
attributes:@{NSFontAttributeName:font}
context:nil];
return frame.size;
}
else
{
return [text sizeWithFont:font constrainedToSize:size];
}
}
这适用于iOS6和7:
CGSize textViewSize = [self.myTextView sizeThatFits:CGSizeMake(self.myTextView.frame.size.width, FLT_MAX)];
self.myTextView.height = textViewSize.height;
答案 1 :(得分:0)
您知道将在shouldChangeTextInRange
内更改的文字范围。
在您从YES
返回shouldChangeTextInRange
之前,您可以扫描该范围内的字符,看看是否有" \n
"或" \r
"那里的字符,然后你可以通过范围内找到的新行字符数减少行号。
答案 2 :(得分:0)
您可以使用以下代码获取UItextView的高度 -
CGSize textViewSize = [text sizeWithFont:[UIFont fontWithName:@"font_name" size:font_size]
constrainedToSize:CGSizeMake(WIDHT_OF_VIEW, FLT_MAX)
lineBreakMode:UILineBreakModeTailTruncation];
将font_name和font_size替换为您在UITextView中使用的实际值。 并将WIDHT_OF_VIEW替换为UITextView的宽度。
您可以使用以下代码获取UITextView的高度 -
textViewSize.height