所以我正在使用iOS 6创建一个应用程序,并想知道为什么我以前在iOS 5上运行良好的代码不再起作用。我有一个动态UILabel的单元格,可以根据它携带的文本进行调整。
这是打开自动布局:
关闭自动布局:
这是我的代码:
- (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;
}
}
答案 0 :(得分:2)
您显示的代码很好,问题很可能在您的单元格中的标签上有限制(您没有显示)。
您的标签需要有约束才能使其与超视图的每个边缘保持固定距离。这可能就是这种情况 - 如果是这样,问题是现在标签不知道如何包装它的行 - 你还需要在标签上设置preferredMaxLayoutWidth
。
我发现在调试Autolayout问题时,DCIntrospect等工具确实非常有用。例如,在这种情况下,很难判断这是一个没有包装文本的正确尺寸的标签,还是标签不够高,无法正确显示您的内容。