我想要的是一个以卡片形式呈现的帖子的表格视图。(例如在 Facebook 应用中)
我用自定义 uitablecell 制作了一个动态 uitableview,并在那里放置了一个带有 2 个标签的 uiview - 标题和副标题。单元格高度是根据 heightForRowAtIndexPath 内的预测标签高度手动测量的,标签高度是由低优先级高度约束自动测量的。
在纵向模式下一切都很好。一旦方向更改为横向 - 它内部的 uitablecell 和 uiview 会完美地改变它们的高度,但由约束控制的标签高度保持与旋转前相同。
更新:
刚刚做了一个底部空间限制......我真的不敢相信,因为我之前一直在这样做,但没有任何帮助,但一切看起来都接近正常。仍然存在一点标签高度滞后..
代码:
- (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 方法中测量它们。这非常简单,现在一切都很好。