我正在努力预测"标签的大小是多少(宽度是已知的,只有高度)。 我想用这个:
CGSize possibleSize = [text sizeWithFont:[UIFont fontWithName:@"American Typewriter" size:16]
constrainedToSize:CGSizeMake(self.collectionView.frame.size.width ,9999)
lineBreakMode:NSLineBreakByWordWrapping];
这会产生非常不准确的结果(即使更改字体和尺寸也不会让它变得更好,例如我得到高度30而不是80)。
我读过其他人也没有取得好成绩。我用它了吗?
我也尝试过:
UILabel *test=[[UILabel alloc] initWithFrame:self.collectionView.frame];
test.text=[dic objectForKey:@"text"];
test.font=[UIFont fontWithName:@"American Typewriter" size:12];
[test sizeToFit];
NSLog(@"%f",test.frame.size.height);
我必须知道高度是多少,而且这种方法甚至都不接近。 还有其他方法可以给出合理的结果吗?
答案 0 :(得分:1)
@matt你正在做些什么,但是我要补充一点,你应该把那个标签上的行数设置为0,之前你计算sizeWithFont。
您也可以尝试替换
CGSizeMake(self.collectionView.frame.size.width ,9999)
与
CGSizeMake(self.collectionView.bounds.size.width ,FLT_MAX)
关键元素是"界限"而不是框架。
最后,确保您没有为[dic objectForKey:@" text"]获取任何内容。
使用
NSAssert(dic[@"text"]);
if ([dic[@"text"] isEqualToString:""]) {
; //empty string
}
答案 1 :(得分:1)
此 sizeWithFont方法现已弃用,此新方法效果最佳
NSString *content = **Whatever your label's content is expected to be**
CGSize maximumLabelSize = CGSizeMake(self.label.frame.size.width, 9999);
NSDictionary *stringAttributes = [NSDictionary dictionaryWithObject:[UIFont fontWithName:@"American Typewriter" size:16] forKey: NSFontAttributeName];
CGSize expectedLabelSize = [content boundingRectWithSize:maximumLabelSize options:NSStringDrawingTruncatesLastVisibleLine|NSStringDrawingUsesLineFragmentOrigin attributes:stringAttributes context:nil].size;
CGFloat labelHeight = expectedLabelSize.height;
其中labelHeight是标签将根据加载到标签中的文本量计算的高度。
我希望这有助于,欢呼,吉姆。
答案 2 :(得分:1)
首先,您需要允许UILabel为多行,默认情况下它是一行(将行数设置为0)
yourLabel.numberOfLines = 0; // means - label can be multiline
其次,看起来您正在计算标签所具有的更大字体的大小。考虑使用相同的大小,以便正确设置计算。
此外,如果您仅支持iOS 7及更新版本,请考虑使用iOS 7或sizeWithAttributes
中引入的boundingRectWithSize:options:attributes:context
方法 - 替换您在iOS 7中使用的方法,并进一步用于文本大小计算。
最后(建议)如果您只需要设置标签高度的高度值,也许您应该考虑使用自动布局(这将更容易处理)。