1

几天来一直在胡闹这个问题,但没有任何进展。我想我想做的很简单:

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

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

这个类似的问题在这里得到了回答,因为不可能,希望在 2 年多的时间里发生了一些变化!: 调整分组 UITableView 中的单元格宽度

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

非常感谢帮助!

4

2 回答 2

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 的属性而被拒绝...即使您只是修改其框架。那么,您需要多少才能让单元格填充表格宽度?

于 2012-04-09T09:57:46.673 回答
0

您可以通过 Storyboard 访问大小检查器中的 UITableView 的前导和尾随空间约束。我不确定这是什么时候添加的,但是将前导空间约束设置为 -10 并将尾随空间约束设置为 10 将使单元格全宽。

于 2012-11-12T19:15:17.993 回答