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

时间:2014-09-29 19:15:41

标签: ios objective-c uitableview interface-builder

如果我在Xcode中创建UITableViewController,例如通过文件→新建项目...→iOS→主从应用程序,则创建UITableView原型细胞。

生成的视图层次结构为:

UITableViewController view hierarchy

左边"边距"在Cell的内容UIView左边缘和"标题"之间自动创建。文本的UILabel元素如下所示为橙色。

Prototype cell gap

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

Runtime gap

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

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

enter image description here

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

10 个答案:

答案 0 :(得分:48)

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

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

输出结果

答案 1 :(得分:36)

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
}

我希望这可以帮助别人。

答案 2 :(得分:36)

转到Main.storyboard&gt;选择UITableViewCell&gt;属性检查员。将分隔符下拉列表从默认插入更改为自定义插入。将左侧插图从15更改为0

enter image description here

答案 3 :(得分:8)

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

中所述
  

How do I eliminate the margin on the left side of a UITableView, without creating a gap on the right?

我想提到的方法是

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

答案 4 :(得分:6)

在TableView&#34;属性检查器&#34;将分隔符插入设置为&#34;自定义&#34;左= 0。 这就是你所要做的一切!

答案 5 :(得分:4)

正如WTIFS所提到的,UITableViewCell的{​​{1}}属性是在内置单元格样式中缩进文本标签的好方法。只需做这样的事情就可以获得漂亮的左边距:

indentation

然而,这不适用于imageView。

答案 6 :(得分:1)

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

enter image description here

答案 7 :(得分:0)

我想我想出了一个简单的解决方案。大声笑。

最佳答案有一些问题......它减少了左边的差距,但产生了正确的差距。

我在Interface Builder中使用了约束

首先在表格视图中添加 -15左边距约束

然后在表格单元格中添加一些缩进以使内容看起来更好。

这里有一些循序渐进的照片:

添加约束。请记住取消选中&#34;与最近邻居的间距&#34;。

Add the constraint. Remember to uncheck the "spacing to nearest neighbor".

表格单元格将向左移动。但似乎距离保证金太近了。

After adding the constraint

因此,选择表格单元格,并在右侧区域添加一些缩进。

add some indentation

答案 8 :(得分:0)

如果您只想更改单元格文本标签的左边距,则根据所需的填充将Horizontal Space Constraint 'Constant'更改为16或8(这是在nib文件中)。如果你不能进入'常量'选择标签,在FrameRectangle视图中更改x坐标,然后单击左侧的约束引脚) enter image description here

答案 9 :(得分:0)

这是Chetan的答案的快速版本:

{{1}}