在Xcode中设置分组单元格的宽度

时间:2012-04-09 08:44:52

标签: ios cocoa-touch uitableview

现在几天愚弄这个问题,但没有进展。我想要做的事情很简单:

我有一个320x60的图像,我在普通的TableView中使用它,因为这些单元占据了屏幕的整个宽度(320)。 TableView中的分组单元格宽度为300,左侧和右侧的内嵌/边距为10左右。

我可以以某种方式删除那些插入/边距并让分组的单元格宽320吗?我尝试将内容插入设置为-10。这确实“移除”左边距但是它仍然只有300宽。还尝试编辑故事板的XML(我正在使用iOS 5 - Storyboards),但没有快乐。

这个类似的问题在这里得到了回答,因为不可能,2年多来一些变化!: Adjust cell width in grouped UITableView

PS我想改变宽度,因为背景图像包含漂亮的阴影,我读过,使用阴影可能意味着性能问题。此外,阴影在边框周围额外增加5px,因此如果使用标准宽度,则意味着-10px宽。

非常感谢!

2 个答案:

答案 0 :(得分:3)

不整洁的解决方案是让表格视图宽340像素,离屏幕左边缘10像素。

涉及更改私有类属性的解决方案是创建UITableViewCell子类,并覆盖其layoutSubviews方法。当我记录子视图时,我发现了这些:

"<UIGroupTableViewCellBackground: 0x95246b0; frame = (9 0; 302 45); autoresize = W; layer = <CALayer: 0x95226b0>>",
"<UITableViewCellContentView: 0x92332d0; frame = (10 0; 300 43); layer = <CALayer: 0x9233310>>",
"<UIView: 0x95248c0; frame = (10 0; 300 1); layer = <CALayer: 0x951f140>>"

如果我们采用这些子视图并填充可用的整个边界会发生什么?

- (void)layoutSubviews;
{
    // By default the cell bounds fill the table width, but its subviews (containing the opaque background and cell borders) are drawn with padding.
    CGRect bounds = [self bounds];

    // Make sure any standard layout happens.
    [super layoutSubviews];
    // Debugging output.
    NSLog(@"Subviews = %@", [self subviews]);
    for (UIView *subview in [self subviews])
    {
        // Override the subview to make it fill the available width.
        CGRect frame = [subview frame];
        frame.origin.x = bounds.origin.x;
        frame.size.width = bounds.size.width;
        [subview setFrame:frame];
    }
}

在这个特殊时刻,在iOS 5.1模拟器上,这是有效的。现在,iOS的某些未来版本可能会重构这些类,导致此方法灾难性地破坏表格布局。您的应用程序可能会被拒绝更改UITableViewCellContentView的属性...即使您只是修改其框架。那么,你需要多少细胞填充表格宽度?

答案 1 :(得分:0)

您可以在Size Inspector中通过Storyboard访问UITableView的前导和尾随空间约束。我不确定何时添加,但将前导空间约束设置为-10而尾随空间约束设置为10将使单元格全宽。