我似乎无法正确地将已弃用的sizeWithFont
替换为boundingRecWithSize
。我仔细检查了所有的答案,并熬夜试图解决这个问题。我真的需要一些比我聪明的人的帮助。这是我试图修改的代码。任何帮助将不胜感激。
CGSize sizeForText = [faqItem.answer sizeWithFont:[UIFont boldSystemFontOfSize:14]
constrainedToSize:CGSizeMake(self.tblView.bounds.size.width - padding, MAXFLOAT)
lineBreakMode:NSLineBreakByWordWrapping];
[sectionInfo insertObject:[NSNumber numberWithFloat:roundf(sizeForText.height + 5)]
inRowHeightsAtIndex:0];
答案 0 :(得分:9)
您需要使用sizeWithAttributes属性。
CGSize mysize = [string sizeWithAttributes:@{NSFontAttributeName: [UIFont systemFontOfSize:14.0f]}];
您还可以将其设置为已创建的字体大小,以便在您多次使用该尺寸时减少重新编码:
CGSize mysize = [string sizeWithAttributes:@{NSFontAttributeName: label1.font}];
我不相信你可以在这个属性中使用constrainedToSize。它必须在CGRect上单独设置。
答案 1 :(得分:2)
我为你写了一个样本,希望它有用。
NSString *text = @" // Do any additional setup after loading the view, typically from a nib.";
CGRect rect = CGRectZero;
NSDictionary *attrDict = @{NSFontAttributeName : [UIFont systemFontOfSize:17]};
rect = [text boundingRectWithSize:CGSizeMake(100,9999)
options:(NSStringDrawingUsesLineFragmentOrigin)
attributes:attrDict
context:Nil];
UILabel *lbl = [[UILabel alloc] init];
lbl.text = text;
rect.origin = CGPointMake(50, 200);
lbl.frame = rect;
lbl.lineBreakMode = NSLineBreakByWordWrapping;
lbl.numberOfLines = 0;
[self.view addSubview:lbl];
lbl.backgroundColor = [UIColor lightGrayColor];
答案 2 :(得分:-3)
在Apple documentation中:
sizeWithFont:返回字符串的大小(如果要渲染) 在一行上使用指定的字体。 (在iOS 7.0中已弃用。使用 sizeWithAttributes:相反。)
- (CGSize)sizeWithFont:(UIFont *)font参数font用于计算字符串大小的字体。返回值。的宽度和高度 生成的字符串的边界框。这些值可以四舍五入到 最近的整数。
所以你可以这样使用sizeWithAttributes::
CGSize sizeForText = [faqItem.answer sizeWithAttributes:@{NSFontAttributeName:[UIFont boldSystemFontOfSize:14]}
constrainedToSize:CGSizeMake(self.tblView.bounds.size.width - padding, MAXFLOAT)
lineBreakMode:NSLineBreakByWordWrapping];
[sectionInfo insertObject:[NSNumber numberWithFloat:roundf(sizeForText.height + 5)]
inRowHeightsAtIndex:0];