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 部分中的最后一个单元格强制全宽分隔符的主要内容,如果未能解决你的问题,请参考以下文章
如何为tableView部分的第一个和最后一个单元格设置圆角
iOS7 中 UIScrollView 中的 UITableView
iOS 7 iPad:UIPageViewController 中的 UITableView 滑动删除(手势识别器冲突)