[英]How to get a height a UITextView should be given width and length of text?
我要添加一个UIView,其中包含一个UITextView,该UITextView限于视图的顶部,左侧和底部。
UIView的宽度应该是屏幕尺寸的宽度,而后者又将是UITextView的宽度。
当我创建此UIView时,可以将它的CGSize设置为屏幕尺寸的宽度,但是我不确定如何计算高度。
如何确定必须设置此UIView的高度,才能正确显示UITextView? 有没有办法找出UITextView具有给定宽度的行数?
使用此代码
CGSize constraintSize = CGSizeMake(textView.width - 2*textView.textContainer.lineFragmentPadding, CGFLOAT_MAX);
CGFloat messageTextViewHeight = [text boundingRectWithSize:constraintSize
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{NSFontAttributeName: textView.font}
context:nil].size.height;
您可以使用以下代码获取动态Rect:
NSString *myDynamicString = @"Hello World!";
CGSize textRect = [myDynamicString boundingRectWithSize:CGSizeMake(MAX_WIDTH, MAX_HEIGHT)
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{NSFontAttributeName:[UIFont fontWithName:@"YouFontName" size:15]}
context:nil];
注意
MAX_WIDTH
允许扩展矩形的宽度。 如果您给200,则rect会扩张到200,然后断裂,反之亦然,获得MAX_HEIGHT
-(CGSize)getSizeForText:(NSString *)文本maxWidth:(CGFloat)width字体:(NSString *)fontName fontSize:(float)fontSize {
CGSize constraintSize;
constraintSize.height = MAXFLOAT;
constraintSize.width = width;
NSDictionary *attributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
[UIFont fontWithName:fontName size:fontSize], NSFontAttributeName,
nil];
CGRect frame = [text boundingRectWithSize:constraintSize
options:NSStringDrawingUsesLineFragmentOrigin
attributes:attributesDictionary
context:nil];
CGSize stringSize = frame.size;
return stringSize;
}
首先,如果您正在使用自动布局,则可以直接使用,您无需做任何事情,只需正确设置自动布局的约束即可。
NSSString
API不是很方便(如您在其他答案中所见),很容易错过一些东西。 我从UIView
使用-(CGSize)sizeThatFits:
UIView *textView = self.textView;
CGSize fitSize = { CGRectGetWidth(textView.frame), CGFLOAT_MAX };
CGSize fitSize = [textView sizeThatFits: fitSize];
NSLog(@"Your desired height: %f", fitSize.height);
它更可靠,并且应该考虑UITextView
所有属性。 我将其用于UILabel
并未测试UITextView
但它应该可以很好地工作。
如果要查看文本视图中的所有文本,并使其周围的视图适应于包含它,最简单的方法是改为使用UILabel。 然后,您可以将约束与优先级一起使用。 将UILabel行数设置为0,以便自动换行。 然后将垂直轴的contentCompressionResistancePriority设置为1000。 然后,您不必担心大小。 让自动版式为您完成工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.