无论使用什么字符串,sizewithfont始终返回相同的值
我想根据文本计算tableviewcell的高度。 我在用着
CGSize userInputSize = [userLabel sizeWithFont:[UIFont fontWithName:@"Arial" size:18.0f] forWidth:[tableView frame].size.width-10 lineBreakMode:NSLineBreakByWordWrapping]
但不知何故,返回值始终为22(字体大小)。 奇怪的是,当我使用时
CGSize userInputSize = [userLabel sizeWithFont:[UIFont fontWithName:@"Arial" size:18.0f] constrainedToSize:[tableView frame].size lineBreakMode:NSLineBreakByWordWrapping];
一切正常。 但我更喜欢第一个版本,所以我可以轻松调整宽度。 为什么不工作?
编辑:抱歉错误的名称约定,但userLabel是NSString而不是标签
sizeWithFont
是一个NSString
方法(UIKit添加)。 使用:
CGSize userInputSize = [userLabel.text sizeWithFont:[UIFont fontWithName:@"Arial" size:18.0f] constrainedToSize:[tableView frame].size lineBreakMode:NSLineBreakByWordWrapping];
要么
CGSize userInputSize = [userLabel.text sizeWithFont:userLabel.font constrainedToSize:[tableView frame].size lineBreakMode:NSLineBreakByWordWrapping];
请参阅NSString UIKit Additions Reference 。
编辑:
我刚试过这段代码:
NSLog (@"test: %@", NSStringFromCGSize([@"test" sizeWithFont:[UIFont fontWithName:@"Arial" size:18.0f]])); NSLog (@"longer test: %@", NSStringFromCGSize([@"longer test" sizeWithFont:[UIFont fontWithName:@"Arial" size:18.0f]]));
结果是:
test: {30, 22} longer test: {85, 22}
CGSize
是一个struct
:
struct CGSize { CGFloat width; CGFloat height; }; typedef struct CGSize CGSize;
所以你可能正在考虑size.height
而不是size.width
EDIT2:
来自文档sizeWithFont:forWidth:lineBreakMode:
如果字符串的大小超过给定的宽度,则此方法使用指定的换行符模式截断文本(仅用于布局),直到它符合最大宽度; 然后它返回结果截断字符串的大小。
因此,您最好定义最大尺寸(实际width
和height
)并使用:
- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(UILineBreakMode)lineBreakMode
请看这个答案 。
我觉得这样比较容易。 设置userLabel的“text”属性后,调用此方法。
[userLabel sizeToFit];
此时,userLabel.frame已更改,以使其适合具有所选字体的文本。 您可以使用userLabel.frame.size.height调整表格视图单元格。