Iphone iOS 7上的UILabel自动大小错误
我正在将我的应用程序转换到iOS 7,并使用此方法(已针对iOS 7修改,使用Iphone iOS 7上的UILabel自动大小错误,iphone,ios,ios7,Iphone,Ios,Ios7,我正在将我的应用程序转换到iOS 7,并使用此方法(已针对iOS 7修改,使用boundingrectizewithsize): 我得到了这样的外表: 正在剪切消息UILabel。感觉行距太大了。它尝试了我找到的许多其他答案,但都不管用 如果有人知道如何帮助我,我将不胜感激 谢谢 试试这个 + (CGSize)messageSize:(NSString*)message { CGSize nameSize = [message sizeWithFont:[UIFont fontWithNam
boundingrectizewithsize
):
我得到了这样的外表:
正在剪切消息UILabel
。感觉行距太大了。它尝试了我找到的许多其他答案,但都不管用
如果有人知道如何帮助我,我将不胜感激
谢谢 试试这个
+ (CGSize)messageSize:(NSString*)message {
CGSize nameSize = [message sizeWithFont:[UIFont fontWithName:@"Futura-Medium" size:13]
constrainedToSize:CGSizeMake(maxWidth, maxHeight) lineBreakMode:NSLineBreakByWordWrapping];
NSLog(@"width = %f, height = %f", nameSize.width, nameSize.height);
return nameSize;
}
试试这个
+ (CGSize)messageSize:(NSString*)message {
CGSize nameSize = [message sizeWithFont:[UIFont fontWithName:@"Futura-Medium" size:13]
constrainedToSize:CGSizeMake(maxWidth, maxHeight) lineBreakMode:NSLineBreakByWordWrapping];
NSLog(@"width = %f, height = %f", nameSize.width, nameSize.height);
return nameSize;
}
我认为您正在从viewDidLoad或ViewWillDisplay更新标签框,因此它不起作用 如果您将从ViewDidDisplay方法更新标签框架,则将获得更新的标签框架
我不确定为什么会发生这种情况,我认为这是iOS 7错误。我认为您正在从viewDidLoad或ViewWillDisplay更新标签框,因此它不起作用 如果您将从ViewDidDisplay方法更新标签框架,则将获得更新的标签框架
我不知道为什么会发生这种情况,我想这是iOS 7的错误。尝试将
nsStringDrawingUserFontLeading
更改为nsStringDrawingUserLineFragmentOrigin
如果您只支持iOS 6和iOS 7,那么我肯定会将所有NSString的sizeWithFont:…
更改为NSAttributeString的boundingRectWithSize
。从iOS 6开始,引入了NSAttributedString的NSStringDrawing函数,它们是线程安全的,不同于我们使用的旧NSString+UIKit方法(例如,sizeWithFont:…
,等等),它们是UIStringDrawing函数(并且当您从非主线程使用它们时,其行为不可预测。如果您碰巧遇到了一个奇怪的多线程角案例,这将为您节省很多麻烦!下面是我如何转换NSString的大小的字体: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;
请注意,文件中提到:
在iOS 7及更高版本中,此方法返回分数大小(以大小为单位)
返回的CGRect的组件);使用返回的大小
在视图中,必须使用“将其值提升到最接近的更高整数”
使用ceil函数
因此,要提取用于调整视图大小的计算高度或宽度,我将使用:
CGFloat height = ceilf(size.height);
CGFloat width = ceilf(size.width);
尝试将
nsStringDrawingUserFontLeading
更改为nsStringDrawingUserLineFragmentOrigin
如果您只支持iOS 6和iOS 7,那么我肯定会将所有NSString的sizeWithFont:…
更改为NSAttributeString的boundingRectWithSize
。从iOS 6开始,引入了NSAttributedString的NSStringDrawing函数,它们与我们使用的旧NSString+UIKit方法不同,是线程安全的sed to(例如,sizeWithFont:…
等),它们是UI字符串绘制函数(当您从非主线程使用它们时,它们的行为不可预测。如果您碰巧遇到奇怪的多线程角情况,这将为您省下很多麻烦!下面是我如何转换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;
请注意,文件中提到:
在iOS 7及更高版本中,此方法返回分数大小(以大小为单位)
返回的CGRect的组件);使用返回的大小
在视图中,必须使用“将其值提升到最接近的更高整数”
使用ceil函数
因此,要提取用于调整视图大小的计算高度或宽度,我将使用:
CGFloat height = ceilf(size.height);
CGFloat width = ceilf(size.width);
您是否在IB中向标签添加了自动布局约束?请尝试摆脱标签的高度约束。不,我在IB中没有使用自动布局。在iOS 7公开之前,请咨询开发论坛。您在哪里调用了此方法?它在自定义UITableViewCell类的
layoutSubviews
中调用。是否在IB中向标签添加了自动布局约束?请尝试获取摆脱标签的高度限制。不,我没有在IB中使用自动布局。在iOS 7公开之前,请咨询开发论坛。您在哪里调用此方法?它在自定义UITableViewCell类的layoutSubviews
中调用。此函数在iOS 7中已被弃用。它不正常工作此函数在iOS 7中已被弃用。它不工作适当地