【问题标题】:Dynamically sized views in UITableViewCellUITableViewCell 中动态大小的视图
【发布时间】:2014-07-11 18:28:22
【问题描述】:

我有一个 UITableViewCell,其中有两个动态调整大小的视图。根据所使用的约束,在哪里实际设置动态高度(行的高度?索引的单元格?),我将如何处理这样的事情。我已经解决了几个小时,但似乎无法弄清楚,谢谢。

【问题讨论】:

  • 我认为您需要更多地描述这两个动态高度。就像他们基于他们的内容?还是它们占单元格总高度的某个百分比?
  • 它们基于它们的内容。动态高度 1 有一些静态元素,然后是动态大小的 UILabel,与动态高度 2 视图相同。

标签: ios uitableview constraints autolayout


【解决方案1】:

如果动态高度仅基于内容,则"V:|[fx1][dh1][dh2][fx2]|" 之类的约束将给您带来不可预知的结果。自动布局将尽力而为,但其中一个动态视图将“放弃”其固有大小以填充空间。

我认为你有两个选择:

给第一个“动态”视图更高的内容拥抱优先级

如果您需要表格中的所有单元格都具有相同的高度,这可能会起作用。

[self.dh1 setContentHuggingPriority:UILayoutPriorityRequired
                            forAxis:UILayoutConstraintAxisVertical];

[self.dh2 setContentHuggingPriority:UILayoutPriorityDefaultLow
                            forAxis:UILayoutConstraintAxisVertical];  

根据内容调整整个单元格的大小

不要认为它必须将东西放入单元格中。调整单元格的大小以适应其内容。

使用这样的约束:"V:|[fx1(20)][dh1][dh2][fx2(20)]" ... 没有将最后一个固定视图“锚定”到底部

然后,在heightForRowAtIndexPath 中,在背景中布置单元格并测量它。

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

  MyCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CELL"];
  // etc...

  [cell setNeedsLayout];
  [cell layoutIfNeeded];

  return cell.fx2.frame.origin.y + cell.fx2.frame.size.height;
}                                

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多