我正在将其中一个应用程序从iOS 6.1移植到iOS 7.我使用的是一个布局,其中有一个UITextView
,有固定的宽度,但它的高度是基于其内容大小.对于iOS 6.1,请判断contentsize.高度,并将其设置为textview的帧高度就足够了,但它在iOS 7上不起作用.
那么,如何根据显示的文本创建一个宽度固定但高度动态的UITextView
呢?
注意:我从代码创建这些视图,而不是使用Interface Builder.
我正在将其中一个应用程序从iOS 6.1移植到iOS 7.我使用的是一个布局,其中有一个UITextView
,有固定的宽度,但它的高度是基于其内容大小.对于iOS 6.1,请判断contentsize.高度,并将其设置为textview的帧高度就足够了,但它在iOS 7上不起作用.
那么,如何根据显示的文本创建一个宽度固定但高度动态的UITextView
呢?
注意:我从代码创建这些视图,而不是使用Interface Builder.
使用以下代码,您可以根据固定宽度更改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;
}
With this function, you will take a NSAttributedString and a fixed width to return the height needed.个
如果要从具有特定字体的文本计算框架,则需要使用以下代码:
- (CGSize)text:(NSString *)text sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size
{
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))
{
CGRect frame = [text boundingRectWithSize:size
options:(NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading)
attributes:@{NSFontAttributeName:font}
context:nil];
return frame.size;
}
else
{
return [text sizeWithFont:font constrainedToSize:size];
}
}
You can add that 100 on your prefix.pch file in your project as:
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
您还可以将以前的测试SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)
替换为:
if ([text respondsToSelector:@selector(boundingRectWithSize:options:attributes:context:)])