如何制作 autosize(height) UITableViewCell?
Posted
技术标签:
【中文标题】如何制作 autosize(height) UITableViewCell?【英文标题】:How to make autosize(height) UITableViewCell? 【发布时间】:2014-08-14 10:53:22 【问题描述】:请告诉我如何让单元格根据行数自动改变高度?
【问题讨论】:
【参考方案1】:在iOS8中会自动为你管理
http://www.shinobicontrols.com/blog/posts/2014/07/24/ios8-day-by-day-day-5-auto-sizing-table-view-cells
在 iOS7/6 中,您可以使用自动布局来执行此操作。您可以创建您的单元格设置您需要的约束。在您的情况下,您可以将标签附加到超级视图的顶部、底部、尾随和前导。
在- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
中,您可以使用[cell systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
来获取单元格的最小大小。例如:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
CustomCell *cell = self.layoutTableViewCell;
[cell configureWithText:text];
CGSize layoutSize = [cell systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
return layoutSize.height;
记住要避免给UILabel设置宽度和高度限制,它会自动调整大小以适应内容。
您可以使用以下方法在 viewDidLoad 中创建 self.layoutTableViewCell
:
UINib *cellNib = [UINib nibWithNibName:CustomCellNibName bundle:nil];
self.layoutTableViewCell = [[cellNib instantiateWithOwner:nil options:nil] objectAtIndex:0];
OT:我认为这是个人品味的问题。就我个人而言,我开始总是使用 UICollectionViews,只是为了重用更多代码并在将来需要自定义布局行为时拥有更大的灵活性。
【讨论】:
OP 有一个UITableView
,而不是UICollectionView
。不过,Shinobi Controls 链接很受欢迎。
@LucaBartoletti 我在 viewDidLoad 中添加了代码:UINib *cellNib = [UINib nibWithNibName:CustomCellNibName bundle:nil]; self.layoutTableViewCell = [[cellNib instantiateWithOwner:nil options:nil] objectAtIndex:0];
,但出现错误Property ‘layoutTableViewCell’ not found on object of type ‘MyTableViewController *'
因为你需要为此创建一个属性
@property (nonatomic, strong) YourCustomCellType *layoutTableViewCell;
如果您将子视图添加到单元格内的 contentView,您可能会被称为 [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]
以上是关于如何制作 autosize(height) UITableViewCell?的主要内容,如果未能解决你的问题,请参考以下文章
winform中如何让label的宽度固定而长度随着文本的变化而变化???