如何为UITableView中的每个单元格创建自定义UITableViewCell动态的高度?

时间:2017-04-12 20:28:49

标签: ios objective-c uitableview

我必须根据单元格中的图像数量使UITableViewCell的高度动态化。

6 个答案:

答案 0 :(得分:1)

viewDidLoad()中添加以下代码行:

tableView.estimatedRowHeight = 200.0
tableView.rowHeight = UITableViewAutomaticDimension

其中estimatedRowHeight是您要为UITableViewCell设置的最大高度。

此外,添加此委托方法并返回UITableViewAutomaticDimension

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
  {
    return UITableViewAutomaticDimension;
  }

答案 1 :(得分:0)

将UITableView的rowHight属性设置为UITableViewAutomaticDimension,并将估计的行高设置为最常见的高度。然后在您的单元格布局中确保所有可视元素之间存在垂直约束,并且单元格将正确布局。垂直约束应该类似于:

V:|-(5)-[imageOne]-[imageTwo]-|

“|”是单元格的内容视图。

答案 2 :(得分:0)

实施委托方法:

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

答案 3 :(得分:0)

@interface yourController : UIViewController<UITableViewDelegate,UITableViewDataSource>

在视图中设置委托加载了

- (void)viewDidLoad {
[super viewDidLoad];

tableview.delegate=self;
tableview.dataSource=self;

}

现在表格视图单元格的高度

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

return 40;//your value
}

答案 4 :(得分:0)

在单元格中

- (CGFloat)cellHeight {
    [self layoutIfNeeded];
    return CGRectGetMaxY(_imageview.frame) + 10;
}

imageView是单元格中的最后一个视图。它只需要lastView的lastView

控制器中的

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

    OJTopicRootCell *cell = (OJTopicRootCell *)[self tableView:tableView cellForRowAtIndexPath:indexPath];
    return cell.cellHeight;

}

答案 5 :(得分:0)

使用estimatedHeight方法快速计算猜测值,这将允许表的快速加载时间。  如果实现了这些方法,则会延迟上述-tableView:heightForXXX调用,直到准备好显示视图,因此可以在那里放置更昂贵的逻辑。 - (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(7_0); - (CGFloat)tableView:(UITableView *)tableView estimatedHeightForHeaderInSection:(NSInteger)section NS_AVAILABLE_IOS(7_0); - (CGFloat)tableView:(UITableView *)tableView estimatedHeightForFooterInSection:(NSInteger)section NS_AVAILABLE_IOS(7_0);