UILabel sizeToFit只适用于AutoLayoutclosures

所以我正在制作一个使用iOS 6的应用程序,并想知道为什么我以前在iOS 5上运行良好的代码不再工作。 我有一个带有dynamicUILabel的单元,它根据它携带的文本进行调整。

这是与自动布局打开:

在这里输入图像说明

这是与自动布局closures:

在这里输入图像说明

这是我的代码:

- (CGFloat)heightForText:(NSString *)bodyText { #define FONT_SIZE 13.0f #define CELL_CONTENT_WIDTH 280.0f #define CELL_CONTENT_MARGIN 5.0f CGSize constraintSize = CGSizeMake(CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), 20000.0f); CGSize labelSize = [bodyText sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraintSize lineBreakMode:NSLineBreakByWordWrapping]; CGFloat height = MAX(labelSize.height, 36.0f); // NSLog(@"height=%f", height); return height + (CELL_CONTENT_MARGIN * 2); } - (CGFloat)tableView:(UITableView *)tv heightForRowAtIndexPath:(NSIndexPath *)indexPath { NSInteger section = [indexPath section]; switch (section) { case 0: if ([self.text.text length]!=0) { return [self heightForText:self.text.text]; } else if ([self.link.text length]!=0) { return 60.0f; } } 

你已经显示的代码很好,问题很可能在你的单元格内的标签(你没有显示)上有限制。

您的标签需要具有约束条件才能使其与超级视图的每个边缘保持一个固定的距离。 这可能已经是这种情况 – 如果是这样的话,现在的问题是标签不知道如何包装其行 – 您还需要在标签上设置preferredMaxLayoutWidth

我发现在debuggingAutolayout问题时,像DCIntrospect这样的工具是非常有用的。 例如,在这种情况下,很难判断这是不是包装文本的正确大小的标签,或者标签的高度不足以正确显示您的内容。