45

我有一个关于 UITableView 的问题......我有一个 UITableViewController 并且我创建了一个自定义单元格。当我可视化 tableView 时,我看到分隔线之前有一点空白,如您在此屏幕截图中看到的那样:

在此处输入图像描述

为什么?它是默认可视化吗?我可以改变一些东西来删除这个白色的左边填充吗?

4

8 回答 8

92

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];
    }
}
于 2013-10-21T16:05:41.603 回答
36

或者,您也可以在界面生成器 (IB) 中进行编辑:

  1. 去IB。
  2. 选择表视图。
  3. 打开右侧的“属性检查器”。
  4. 将“分隔符插入”从默认更改为自定义。
  5. 将“左”属性从 15 更改为 0。

这与@Ashok 的答案具有相同的效果,但不需要编写任何代码。

更新适用于 iOS 7 和 8

在 iOS 9 上更新作品

于 2014-05-30T07:55:26.837 回答
16

使用下面的代码删除 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];
    }
}
于 2014-11-03T11:56:21.053 回答
10

没有空白!我对此输入了一个错误,Apple 只是将其关闭为“不是错误”,但告诉我为什么它不是错误。我编写了一个简单的项目,为应用程序中的每个可能视图设置颜色。我看到的是,这些像素的颜色实际上是单元格本身的背景颜色(不是 contentView!),正如 Apple 告诉我的那样。

cell.contentView.backgroundColor 为绿色,cell.background 颜色为红色(用 Pixie 拍摄):

在此处输入图像描述

最后,在没有分隔符的情况下,cell.contentView 完全填满了单元格。使用分隔符,底部有一个或两个像素的间隙。分隔符在插入时填充了大部分间隙,但随后单元格的一些像素会显示出来。

谜团已揭开!

编辑:似乎根据您配置情节提要的方式, contentView.backgroundColor 会“丢失”或设置为白色。如果您在提供细胞时过度使用它,您可以获得您想要的行为:

    let cell = tableView.dequeueReusableCellWithIdentifier("FOO", forIndexPath: indexPath) as UITableViewCell

    cell.backgroundColor = UIColor.redColor()
    cell.contentView.backgroundColor = UIColor.greenColor()
于 2014-12-05T21:34:25.717 回答
9

迅速

cell.separatorInset = UIEdgeInsetsMake(0, 0, cell.frame.size.width, 0)
if (cell.respondsToSelector("preservesSuperviewLayoutMargins")){
        cell.layoutMargins = UIEdgeInsetsZero
        cell.preservesSuperviewLayoutMargins = false
   }

这个对我有用

谢谢

于 2015-10-25T16:05:52.760 回答
8

对于那些想要在 Swift 中保留 UIEdgeInsetSettings 并且不使用 Storyboard 的人:

之前:(默认行为)

之前,默认设置

添加以下代码:

tableView.separatorInset.right = tableView.separatorInset.left

之后,实施

于 2015-01-18T01:01:18.173 回答
7

这对我有用:

cell?.layoutMargins = UIEdgeInsetsZero;
cell?.preservesSuperviewLayoutMargins = false
于 2015-03-18T10:18:54.640 回答
0

这是 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
}

希望这对某人有所帮助!

纳雷什。

于 2017-04-27T06:27:27.773 回答