如何在UITableView中调整原型单元格的左边距?

j b*_*j b 55 objective-c interface-builder uitableview ios

如果我创建一个UITableViewController,例如通过文件→新建项目...→iOS→在Xcode中的主要细节应用程序,UITableView则创建一个原型单元格.

生成的视图层次结构为:

UITableViewController视图层次结构

在单元格的内容UIView左边缘和"标题"文本UILabel元素之间自动创建左"边距" ,如下面橙色所示.

原型细胞缺口

这会在设备的屏幕边缘和UILabel运行时的文本之间产生相应的余量:

运行间隙

那么,这个间隙的宽度设置在哪里,以及如何调整?

UILabel的Size Inspector中的控件显示为灰色:

在此输入图像描述

我首选的选项是能够在Interface Builder中设置此间隙的宽度,但我还想了解这个间隙的设置位置,以及如何以编程方式更改它.

mil*_*hal 49

您只需要设置contentInset表视图的属性即可.您可以根据需要设置值.

self.tableView.contentInset = UIEdgeInsetsMake(0, -15, 0, 0);

输出结果

  • 我不认为这是一个很好的解决方案,如果你这样做,它会让你的UITableViewCell向左移动15,而单元格右边有15个边距. (18认同)
  • 这将使内容向左移动 15pt,并在 iOS13 中在右侧留下 15pt 的空间 (2认同)

Far*_*C K 41

转到Main.storyboard>选择UITableViewCell> Attributes Inspector.将分隔符下拉列表从默认插入更改为自定义插入.将左侧插入从15更改为0

在此输入图像描述

  • 在2019年使用Xcode 10.x和iOS 12的Xcode界面构建器中,这仍然是正确的方法。 (2认同)

Fra*_*amo 37

iOS 8开始可以使用单元属性layoutMargins.因此,调整单元格边距的正确方法是以这种方式在您tableView:cellForRowAtIndexPath或您的自定义UITableViewCell中设置此属性:

override func awakeFromNib() {
    super.awakeFromNib()

    self.layoutMargins = UIEdgeInsetsZero //or UIEdgeInsetsMake(top, left, bottom, right)
    self.separatorInset = UIEdgeInsetsZero //if you also want to adjust separatorInset
}
Run Code Online (Sandbox Code Playgroud)

我希望这可以帮助别人.

  • 我想建议`self.contentView.layoutMargins = UIEdgeInsetsZero` 将达到预期的效果。至少对我来说,因为我将所有视图相对于内容视图边距对齐。 (3认同)

Che*_*tan 9

只需在代码中添加方法,如下面的链接所示

如何消除UITableView左侧的边距,而不会在右边创建间隙?

我想提到的方法是

-(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 ([tableView respondsToSelector:@selector(setLayoutMargins:)]) {
    cell.preservesSuperviewLayoutMargins = NO;
    [cell setLayoutMargins:UIEdgeInsetsZero];
    }
    if ([cell respondsToSelector:@selector(setSeparatorInset:)]){
    [cell setSeparatorInset:UIEdgeInsetsZero];
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 包括您所建议的实际代码/方法,而不是仅共享链接! (2认同)

Ale*_*cci 8

如果您在单元格中使用 xib,请确保未选中“相对于边距”。您可以通过检查器进行检查,如下面的屏幕截图所示:

在此处输入图片说明

  • 如果您正在使用情节提要和笔尖,则非常有用 (2认同)

Nic*_*ita 6

在TableView"属性检查器"中,将分隔符插入设置为"自定义",使用Left = 0.这就是您所要做的!

  • 这会更改*separator*inset(例如用于表组标题),但不会影响单元格内​​容.设置分隔符插入 - >从左到左,不会影响单元格的内容视图左边缘和UILabel之间的空间. (4认同)

Dan*_*e P 5

正如 WTIFS 所提到的,UITableViewCellindentation属性是在内置单元格样式中缩进文本标签的好方法。只需执行以下操作即可获得漂亮的左边距:

cell.indentationLevel = 2;
Run Code Online (Sandbox Code Playgroud)

但是,这不适用于 imageView。