iOS7 UITableView 部分中的最后一个单元格强制全宽分隔符

Posted

技术标签:

【中文标题】iOS7 UITableView 部分中的最后一个单元格强制全宽分隔符【英文标题】:iOS7 last cell in UITableView section forces full width separator 【发布时间】:2013-10-01 13:41:40 【问题描述】:

下面的UITableView 有自定义UITableViewCells,我可以使用自定义UITableViewCell 中的这一行来微调分隔符:

self.separatorInset = UIEdgeInsetsMake(0, kDefaultSeparatorLeftInset, 0, 0);

但是,该部分底部的单元格有一个默认分隔符,它覆盖了我设置的自定义 UIEdgeInsets

我希望所有分隔符的宽度相同,有没有办法在不手动重绘分隔符的情况下做到这一点?

【问题讨论】:

【参考方案1】:

经过一些实验,我发现唯一真正的解决方案是将 UITableViewStyle 设置为 UITableViewStylePlain 并使用以下方法设置空页脚:

-(UIView*)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section

    return [[UIView alloc] initWithFrame:CGRectZero];


-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section

    return 0.01f;

这对某些人来说不是一个令人满意的解决方案,因为UITableViewStylePlain 没有提供UITableViewStyleGrouped 的所有功能,但它给了我没有全角分隔符的部分。

【讨论】:

这是一个不错的解决方案,但我更喜欢隐藏默认分隔符并在表格单元格的底部添加一个 1px 的视图。 我有同样的情况,直到我点击最后一个单元格。点击最后一个分隔符后再次全宽并在代码[self.tableView setSeparatorInset:UIEdgeInsetsMake(0, 15, 0, 0)] 中更改它没有帮助。有什么解决办法吗? 似乎viewForFooterInSection 实际上是不必要的。将 .01f 返回为 heightForFooterInSection 似乎可以解决问题。没有更多的悬空分隔符!【参考方案2】:

经过一些实验,我找到了解决方案! tableFooterView 可以像这样覆盖分隔符:

UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 1)];
UIView *v2 = [[UIView alloc] initWithFrame:CGRectMake(0, -1, 320, 2)];
v2.backgroundColor = [UIColor whiteColor];
v.backgroundColor = [UIColor whiteColor];
[v addSubview:v2];
self.tableView.tableFooterView = v;

【讨论】:

这对我有用!我还在 viewForFooterInSection 中返回了“v”。谢谢!【参考方案3】:

在 tableView 本身上使用 separatorInset 属性,而不是在单个单元格上。 tableView 的 separatorInset 设置了默认的 inset,可以被单元格覆盖,以及底部“额外”单元格的 inset。

【讨论】:

不幸的是,在 ios7 中更改 tableView 的 separatorInset 不会影响每个部分开头和结尾的分隔符。这些似乎永久填充了 tableView 的宽度。更改 separatorInset 只会影响中间分隔符。【参考方案4】:

给表格一个空的页脚:

self.tableFooterView = [[UIView alloc] init]

【讨论】:

我不明白人们如何不使用它。当其他方法给我带来这么多问题时,这完美无缺

以上是关于iOS7 UITableView 部分中的最后一个单元格强制全宽分隔符的主要内容,如果未能解决你的问题,请参考以下文章

获取 UITableview 部分中的最后一个单元格

如何为tableView部分的第一个和最后一个单元格设置圆角

iOS7 中 UIScrollView 中的 UITableView

iOS 7 iPad:UIPageViewController 中的 UITableView 滑动删除(手势识别器冲突)

IOS 7:从分组样式 UITableView 的一部分中删除边框

为什么我的UITableView顶部有额外的填充,iOS7中的样式为UITableViewStyleGrouped