旋转时UITableCell内标签的动态高度

时间:2013-07-20 14:51:44

标签: ios uitableview

我想要的是以卡片形式呈现的帖子的表格视图。 (例如在Facebook应用程序中)

我使用自定义的uitablecell创建了一个动态的uitableview,并在那里找到了带有2个标签的uiview - 标题和副标题。根据heightForRowAtIndexPath内预测的标签高度手动测量单元高度,标签高度由低优先级高度约束自动测量。

在肖像模式下一切都很棒。一旦方向改变为横向 - uitablecell和uiview内部就会完美地改变它们的高度,但是由约束控制的标签高度保持与旋转前相同。

Some screenshots

更新:

Just made a bottom space constraint...我实际上并不相信,因为我以前一直这样做,没有任何帮助,但一切看起来都接近正常。一点标签高度滞后仍在这里..

CODE:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{

    NSInteger title_size = 17;
    NSInteger subtitle_size = 14;

    NSInteger card_horizontal_margin = 10 * 2;
    NSInteger cell_horizontal_margin = 10 * 2;
    NSInteger full_horizontal_margin = card_horizontal_margin + cell_horizontal_margin;

    NSInteger nameHeight = 0;
    NSInteger descHeight = 0;

    NSArray *items = [userDefaults objectForKey: feedType];
    NSString *descText = [[items valueForKey:@"description"] objectAtIndex:indexPath.row];
    NSString *nameText = [[items valueForKey:@"name"] objectAtIndex:indexPath.row];

    NSInteger line_width = self.tableView.frame.size.width - full_horizontal_margin;

    if (![nameText isEqual:[NSNull null]]) {

        CGSize nameTextSize = [nameText sizeWithFont:[UIFont boldSystemFontOfSize:title_size] constrainedToSize:CGSizeMake(line_width, 1000.0f) lineBreakMode:NSLineBreakByWordWrapping];

        nameHeight = nameTextSize.height;
    }

    if (![descText isEqual:[NSNull null]]) {

        CGSize descTextSize = [descText sizeWithFont:[UIFont systemFontOfSize:subtitle_size] constrainedToSize:CGSizeMake(line_width, 1000.0f) lineBreakMode:NSLineBreakByWordWrapping];

        descHeight = descTextSize.height;
    }

    NSInteger full_height = nameHeight + descHeight + 50;

    return full_height;

}

我如何修复

为每个标签设置了2个高优先级约束,并在单元类的layoutSubviews方法中测量它们。这非常简单,现在一切都很好。

1 个答案:

答案 0 :(得分:0)

如果您希望标签高度随单元格高度一起变化,请确保您对单元格的顶部和底部有高度限制,并且没有固定的高度约束。如果您的两个标签位于彼此之上,则顶部标签应该对单元格的顶部有一个约束,而一个标签从底部标签的顶部到顶部。然后底部标签应该有一个到单元格的底部。