繁体   English   中英

如何获得高度的UITextView应该给定​​文本的宽度和长度?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM