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 添加参考。
编辑:
我刚试过这段代码:
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
编辑2:
来自文档sizeWithFont:forWidth:lineBreakMode:
如果字符串的大小超过给定的宽度,此方法会使用指定的换行模式截断文本(仅用于布局目的),直到它符合最大宽度;然后它返回生成的截断字符串的大小。
因此,您最好定义最大尺寸(真实width
和大height
)并使用:
- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(UILineBreakMode)lineBreakMode
请看这个答案。