分隔线前的空格进入我的TableView

时间:2013-10-21 16:01:27

标签: iphone ios uitableview interface-builder

我对UITableView有疑问... 我有一个UITableViewController,我创建了一个自定义单元格。 当我可视化tableView时,我会在分隔线前看到一个小空格,如您可以在此屏幕截图中看到的那样:

enter image description here

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

8 个答案:

答案 0 :(得分:89)

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];
    }
}

答案 1 :(得分:33)

或者,您也可以在界面构建器(IB)中编辑它:

  1. 转到IB。
  2. 选择表格视图。
  3. 打开右侧的“属性检查器”。
  4. 将“分隔符插入”从默认更改为自定义。
  5. 将“Left”属性从15更改为0.
  6. 这与@Ashok的答案具有相同的效果,但不需要编写任何代码。

    更新适用于iOS 7和8

    更新适用于iOS 9

答案 2 :(得分:16)

使用以下代码删除UITableView中不需要的填充。它适用于IOS 8和IOS。 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];
    }
}

答案 3 :(得分:10)

没有空白区域!我输入了一个错误,苹果公司刚刚将其关闭为#34;而不是一个错误",但告诉我为什么它不是一个错误。我写了一个simple project,为应用中的每个可能的视图设置颜色。我看到的是那些像素的颜色实际上是细胞本身的背景颜色(而不是contentsView!),正如Apple告诉我的那样。

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

enter image description here

最后,如果没有分隔符,cell.contentView将完全填充单元格。使用分隔符时,底部有一个或两个像素的间隙。插入时,分隔符填充了大部分间隙,但是细胞中有一些像素显示出来。

神秘解决了!

编辑:看起来,根据你配置故事板的方式,contentView.backgroundColor会失去"丢失"或设为白色。如果你在提供细胞时过度骑行,你可以得到你想要的行为:

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

    cell.backgroundColor = UIColor.redColor()
    cell.contentView.backgroundColor = UIColor.greenColor()

答案 4 :(得分:9)

夫特

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

这个对我有用

由于

答案 5 :(得分:7)

这对我有用:

cell?.layoutMargins = UIEdgeInsetsZero;
cell?.preservesSuperviewLayoutMargins = false

答案 6 :(得分:5)

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

之前:(默认行为)

Before, Default Setting

添加以下代码:

tableView.separatorInset.right = tableView.separatorInset.left

After, Implemented

答案 7 :(得分:0)

这是swift 3& UIT的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
}

希望这有助于一个人!

纳雷什。