我想根据文本计算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而不是标签
答案 0 :(得分:3)
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
请参阅this answer。
答案 1 :(得分:0)
我觉得这样比较容易。设置userLabel的“text”属性后,调用此方法。
[userLabel sizeToFit];
此时,userLabel.frame已更改,以使其适合具有所选字体的文本。您可以使用userLabel.frame.size.height调整表格视图单元格。