我希望我的UITableView
只有它所需要的高度,因为它漂浮在主UIViewController
view
之上。如果我硬编码200的高度和theres'表中只有一个单元格,看起来很傻。
我知道在我的视图控制器中,我可以监视表视图并根据它具有的单元格数定义它的高度,但是高度是视图的属性,对于MVC,它不会&# 39; t对于控制器积极管理视图的高度非常有意义。
是否可以拥有一个UITableView
子类,并根据它所拥有的单元格数定义一个内在高度?因此,使用自动布局,我可以将子类添加到我的视图中,指定其宽度,将其垂直居中,并可能定义一个小于或等于"高度约束说要保持小于200pts。但是大多数情况下视图的内在内容大小会自动定义视图的高度吗?
这就像UILabel
能够水平和垂直居中,距离左右一定距离,让它自动垂直增长和缩小。
我可以用UITableView
子类来实现吗?
答案 0 :(得分:3)
您可以通过让表视图使用其contentSize属性“知道”它需要多高来轻松完成此操作。如果您使用估计的行高,此值可能会有些不准确,但它应该足够好。在这个例子中,我给表视图一个高度约束(以及width和centerY),并为它做了一个IBOutlet(heightCon)。唯一需要的代码就是这个,
@interface RDTableView ()
@property (weak,nonatomic) IBOutlet NSLayoutConstraint *heightCon;
@end
@implementation RDTableView
-(void)reloadData {
[super reloadData];
self.heightCon.constant = MIN(200, self.contentSize.height);
}
您还必须覆盖reloadRowsAtIndexPaths:withRowAnimation:和 reloadSections:withRowAnimation:如果你用其中任何一个更新你的表。
答案 1 :(得分:0)
当您(重新)加载TableView
中的数据时,您可以执行此操作。 TableView
只需要它所需的高度
CGRect frame = youTableView;
frame.size.height = CELL_HEIGHT*[yourArray count];
if(frame.size.height > MAX_TABLEVIEW_HEIGHT)
{
frame.size.height = MAX_TABLEVIEW_HEIGHT
}
youTableView.frame = frame;
答案 2 :(得分:0)
这就像设计用户界面时的鸡/蛋问题一样。听起来你想根据它包含的行数*每行的高度来设置浮动tableview的高度,但是tableview在绘制它之前不知道任何这些信息,即[tableView reloadData]和相应的调用行委托方法的高度。
我建议将tableview渲染到某处,绘制所有行,总结每行的所有高度,然后使用适当的CGRect将视图呈现给用户。