我正在将其中一个应用程序从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:)])‌

Ios相关问答推荐

带外部笔划的圆形进度视图

删除领域中的cartItem时出现问题

如何在SwiftUI中将图像整合到文本标签中间?

如何删除点击时按钮的不透明动画?

使用异步重载实现Swift协议一致性

垂直分页 UIScrollView 高度不正确

更改订单时如何保存商品的位置?

为什么@FetchRequest 在删除时不更新和重绘视图?

SwiftUI 中的描边图像边框

在视图控制器中实例化视图控制器是否可能/智能?

Text() 正在添加额外的前导尾随填充 SwiftUI

Flutter:无法构建 iOS 应用程序ARCHIVE FAILED,为设备归档时遇到错误

如何将 ImageView 放置在 UIView 的中心?

如何忽略touch 事件并将它们传递给另一个子视图的 UIControl 对象?

如何从一个特定的视图控制器中隐藏导航栏

呈现和关闭模态视图控制器

UISegmentedControl 以编程方式更改段数

iOS 7 及更高版本: for each 视图控制器设置状态栏样式

UIView - 加载视图时如何获得通知?

以编程方式确定 iPhone 是否越狱