gpt4 book ai didi

iOS7 UITextView contentsize.height替代方案

转载 作者:IT王子 更新时间:2023-10-29 07:31:10 25 4
gpt4 key购买 nike

我正在将其中一个应用程序从 iOS 6.1 移植到 iOS 7。我使用的布局中有一个具有固定宽度的 UITextView,但它的高度基于其内容大小。对于 iOS 6.1,检查 contentsize.height 并将其设置为 TextView 的框架高度就足够了,但它在 iOS 7 上不起作用。

然后我怎样才能创建一个宽度固定但高度基于它显示的文本的动态高度的 UITextView

注意:我是通过代码创建这些 View ,而不是使用 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;
}

使用此函数,您将采用 NSAttributedString 和固定宽度来返回所需的高度。

如果你想从你的特定字体的文本计算框架,需要使用下面的代码:

- (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];
}
}

您可以将 SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO 添加到项目中的 prefix.pch 文件中,如下所示:

#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:)])‌

关于iOS7 UITextView contentsize.height替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19028743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com