当单元格获得自定义高度时如何自定义 UITableView 分隔符

Posted

技术标签:

【中文标题】当单元格获得自定义高度时如何自定义 UITableView 分隔符【英文标题】:How to customize UITableView separator when the cells got a custom height 【发布时间】:2014-12-10 16:25:22 【问题描述】:

我关注了这个帖子:How to customize tableView separator in iPhone

问题是当我为我的单元格设置自定义高度时它无法正常工作。

我将向您展示两张图片,一张有两行的图片是为我的单元格设置自定义高度的结果。

自定义高度:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    UIView *lineView = [[UIView alloc] initWithFrame:CGRectMake(0, cell.contentView.frame.size.height - 1.0, cell.contentView.frame.size.width, 1)];

    lineView.backgroundColor = [UIColor darkGrayColor];
    [cell.contentView addSubview:lineView];


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

    return 50;

【问题讨论】:

自定义高度是只针对一个单元格还是所有单元格? 您有自定义单元格吗?在一个笔尖?问题是在设置 lineView 后单元格会展开。如果你想让它粘在底部,你可以查看 autoresizingMask 或者设置 autoLayout 约束 【参考方案1】:

您好,问题出在 cellForRowAtIndexPath 方法中,您的单元格还不知道它的高度。如果您使用自定义高度(您知道这个高度,也可以在 cellForRow 中使用它...)。

这里举例:

  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

UIView *lineView = [[UIView alloc] initWithFrame:CGRectMake(0, 49.0, cell.contentView.frame.size.width, 1)];

lineView.backgroundColor = [UIColor darkGrayColor];
[cell.contentView addSubview:lineView];


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

return 50;

另外,不要忘记您可以使用 separatorStyle 和 separatorInset,以便自定义这一行。如果你不使用它就不要了:

   self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

【讨论】:

这看起来很有希望,我回到办公室时会测试它,谢谢! Onik 的回答是对的,只有一件事 - 更好的是,如果你不硬编码布局,而是覆盖 UITableViewCell layoutSubviews 函数并在那里放置类似self.lineView.frame = CGRectMake(0, self.frame.size.height - 1, self.frame.size.width, 1);

以上是关于当单元格获得自定义高度时如何自定义 UITableView 分隔符的主要内容,如果未能解决你的问题,请参考以下文章

从自定义单元格加载时如何调整单元格表的高度?

从自定义表格视图单元格类加载时如何调整单元格的高度?

UITableView 自定义单元格高度未正确管理 swift 中的动态约束

如何在使用tableViews自定义单元格时在运行时更改表视图单元格高度?

如何在表格视图中加载不同的自定义单元格

具有自动调整大小的单元格的自定义 UICollectionViewLayout 会因估计的项目高度较大而中断