分隔线之前的空白行放入我的TableView中
我有一个关于UITableView的问题…我有一个UITableViewController,我创build了一个自定义的单元格。 当我看到tableView时,在分隔线之前看到一个小小的空白,你可以看到这个截图:
为什么? 这是一个默认的可视化? 我可以改变一些东西来删除这个白色的左边填充吗?
iOS 7中默认提供了主要的空白,即使是自定义单元格也是如此。
检出这个属性UITableviewCell属性separatorInset
删除/添加单元格行分隔符两端的白色间距。
//删除空格
cell.separatorInset = UIEdgeInsetsZero;
另外,在UITableView级别,你可以使用这个属性 –
if ([tableView respondsToSelector:@selector(setSeparatorInset:)]) { // Safety check for below iOS 7 [tableView setSeparatorInset:UIEdgeInsetsZero]; }
更新 – 下面的代码适用于iOS 7和iOS 8:
-(void)viewDidLayoutSubviews { if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) { [self.tableView setSeparatorInset:UIEdgeInsetsZero]; } if ([self.tableView respondsToSelector:@selector(setLayoutMargins:)]) { [self.tableView setLayoutMargins:UIEdgeInsetsZero]; } } -(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { if ([cell respondsToSelector:@selector(setSeparatorInset:)]) { [cell setSeparatorInset:UIEdgeInsetsZero]; } if ([cell respondsToSelector:@selector(setLayoutMargins:)]) { [cell setLayoutMargins:UIEdgeInsetsZero]; } }
或者,您也可以在界面构build器(IB)中对其进行编辑:
- 去IB。
- select表格视图。
- 打开右侧的“属性检查器”。
- 将“分隔符插入”从“默认”更改为“自定义”。
- 将“左”属性从15更改为0。
这与@Ashok的答案具有相同的效果,但不需要编写任何代码。
更新适用于iOS 7和8
更新在iOS 9上工作
使用下面的代码来删除UITableView中不需要的填充。 它适用于IOS 8和7
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { if ([tableView respondsToSelector:@selector(setSeparatorInset:)]) { [tableView setSeparatorInset:UIEdgeInsetsZero]; } if ([tableView respondsToSelector:@selector(setLayoutMargins:)]) { [tableView setLayoutMargins:UIEdgeInsetsZero]; } if ([cell respondsToSelector:@selector(setLayoutMargins:)]) { [cell setLayoutMargins:UIEdgeInsetsZero]; } }
没有空白! 我为此input了一个错误,苹果公司把它closures为“不是一个错误”,但告诉我为什么它不是一个错误。 我写了一个简单的项目 ,为应用程序中的每个可能的视图设置颜色。 我看到的是这些像素的颜色实际上是单元格本身的背景颜色(而不是内容视图!),正如苹果告诉我的那样。
cell.contentView.backgroundColor是绿色的,cell.background的颜色是红色的(用Pixie拍摄):
最后,没有分隔符,cell.contentView完全填充单元格。 使用分隔符,底部有一个像素或两个间隙。 插入时,分隔符填补了大部分的空白,但是有一些像素显示出来。
谜团已揭开!
编辑:这似乎取决于你如何configuration你的故事板,contentView.backgroundColor得到“失去”或设置为白色。 如果你在提供细胞的时候过度使用它,你可以得到你想要的行为:
let cell = tableView.dequeueReusableCellWithIdentifier("FOO", forIndexPath: indexPath) as UITableViewCell cell.backgroundColor = UIColor.redColor() cell.contentView.backgroundColor = UIColor.greenColor()
迅速
cell.separatorInset = UIEdgeInsetsMake(0, 0, cell.frame.size.width, 0) if (cell.respondsToSelector("preservesSuperviewLayoutMargins")){ cell.layoutMargins = UIEdgeInsetsZero cell.preservesSuperviewLayoutMargins = false }
这个为我工作
谢谢
这为我做了诡计:
cell?.layoutMargins = UIEdgeInsetsZero; cell?.preservesSuperviewLayoutMargins = false
对于那些想要在Swift中保留UIEdgeInsetSettings并且不使用Storyboard的人:
之前:(默认行为)
添加下面的代码:
tableView.separatorInset.right = tableView.separatorInset.left
这是对于Swift 3和更高版本的UITableViewCell类的扩展
extension UITableViewCell { func removeSeparatorLeftPadding() -> Void { if self.responds(to: #selector(setter: separatorInset)) // Safety check { self.separatorInset = UIEdgeInsets.zero } if self.responds(to: #selector(setter: layoutMargins)) // Safety check { self.layoutMargins = UIEdgeInsets.zero } } }
用法:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell : UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "menuCellID")! // .. Your other code cell.removeSeparatorLeftPadding() return cell }
希望这有助于一个人!
纳雷什。