gpt4 book ai didi

iphone - iOS 7 上的 UILabel 自动调整大小错误

转载 作者:行者123 更新时间:2023-11-28 20:14:05 25 4
gpt4 key购买 nike

我正在将我的应用程序转换到 iOS 7 并使用此方法(已针对 iOS 7 进行了修改,使用 boundingRectWithSize...):

+ (CGSize)messageSize:(NSString*)message {

NSDictionary *attributes = @{NSFontAttributeName : [UIFont fontWithName:@"Futura-Medium" size:13]};

CGRect frame = [message boundingRectWithSize:CGSizeMake([PTSMessagingCell maxTextWidth], CGFLOAT_MAX) options:NSStringDrawingUsesFontLeading attributes:attributes context:nil];

return frame.size;
}

我得到这个外观:

bubble

正在剪切消息 UILabel。感觉行距太大了。它尝试了我找到的许多其他答案,但没有一个有效。

如果有人知道如何帮助我,我将不胜感激! ;)

谢谢!

最佳答案

尝试将 NSStringDrawingUsesFontLeading 更改为 NSStringDrawingUsesLineFragmentOrigin 的选项。

如果您只支持 iOS 6 和 iOS 7,那么我肯定会将您所有的 NSString 的 sizeWithFont:... 更改为 NSAttributeString 的 boundingRectWithSize。从 iOS 6 开始,引入了 NSAttributedString 的 NSStringDrawing 函数,它们是线程安全的,不像我们习惯的旧 NSString+UIKit 方法(例如 sizeWithFont:... 等),它们是 UIStringDrawing函数(并且当你从非主线程使用它们时会出现不可预测的行为。如果你碰巧有一个奇怪的多线程极端情况,它会让你省去很多麻烦!这是我如何转换 NSString 的 sizeWithFont:constrainedToSize: :

曾经是什么:

NSString *text = ...;
CGFloat width = ...;
UIFont *font = ...;
CGSize size = [text sizeWithFont:font
constrainedToSize:(CGSize){width, CGFLOAT_MAX}];

可以替换为:

NSString *text = ...;
CGFloat width = ...;
UIFont *font = ...;
NSAttributedString *attributedText =
[[NSAttributedString alloc]
initWithString:text
attributes:@
{
NSFontAttributeName: font
}];
CGRect rect = [attributedText boundingRectWithSize:(CGSize){width, CGFLOAT_MAX}
options:NSStringDrawingUsesLineFragmentOrigin
context:nil];
CGSize size = rect.size;

请注意文档中提到的:

In iOS 7 and later, this method returns fractional sizes (in the size component of the returned CGRect); to use a returned size to size views, you must use raise its value to the nearest higher integer using the ceil function.

因此,为了提取用于调整 View 大小的计算高度或宽度,我会使用:

CGFloat height = ceilf(size.height);
CGFloat width = ceilf(size.width);

关于iphone - iOS 7 上的 UILabel 自动调整大小错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18838185/

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