我正在构建一个没有IB的应用程序,我正在从头开始编写所有内容。我有一个自定义的UITableViewCell,当我尝试计算高度时,它的行为就像没有子视图一样。我可以找到很多关于动态设置高度的讨论,但没有真正关于如何计算它,基于子视图以及如何以及在何处设置约束。我所做的是为我的第一个组件设置约束--UIImageView并添加我的单元格的contenView。我得到的是0.
我将非常感谢您或至少方向的任何意见!
heightForRowAtIndexPath:
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell* cell = [[UITableViewCell alloc]init];
cell.imageView.image = [UIImage imageNamed:@"avatar"];
cell.imageView.translatesAutoresizingMaskIntoConstraints=NO;
NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-30-[image]" options:0 metrics:nil views:@{ @"image": cell.imageView }];
[cell.contentView addConstraints:constraints];
NSArray *constraints2 = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-20-[image]" options:0 metrics:nil views:@{ @"image": cell.imageView}];
[cell.contentView addConstraints:constraints2];
[ NSLayoutConstraint constraintWithItem:cell.imageView attribute: NSLayoutAttributeWidth
relatedBy:NSLayoutRelationEqual toItem:cell.imageView attribute:NSLayoutAttributeHeight multiplier:1.0 constant:0.0f];
CGFloat height = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
NSLog(@"%f",height);
return height;
}
答案 0 :(得分:0)
我对此类问题的解决方案是UITableViewAutomaticDimension
。您只需使用heightForRowAtIndexPath
方法返回此内容即可。您必须将tableView.estimatedRowHeight
设置为接近您将获得的值。
例如,如果你有5个高度为[100,200,250,270,300]的单元格,你可以将estimatedRowHeight
设置为220(或类似的东西)。
您也可以在Using Auto Layout in UITableView for dynamic cell layouts & variable row heights查看第一个答案。
答案 1 :(得分:0)
我不确定它是否有效,或者它是否正确但是尝试这种方式
static NSInteger someCell = 1;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [UITableViewCell new];
cell.tag = someCell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
if (cell.tag == someCell) return 100.;
return 30.;
}