现在几天愚弄这个问题,但没有进展。我想要做的事情很简单:
我有一个320x60的图像,我在普通的TableView中使用它,因为这些单元占据了屏幕的整个宽度(320)。 TableView中的分组单元格宽度为300,左侧和右侧的内嵌/边距为10左右。
我可以以某种方式删除那些插入/边距并让分组的单元格宽320吗?我尝试将内容插入设置为-10。这确实“移除”左边距但是它仍然只有300宽。还尝试编辑故事板的XML(我正在使用iOS 5 - Storyboards),但没有快乐。
这个类似的问题在这里得到了回答,因为不可能,2年多来一些变化!: Adjust cell width in grouped UITableView
PS我想改变宽度,因为背景图像包含漂亮的阴影,我读过,使用阴影可能意味着性能问题。此外,阴影在边框周围额外增加5px,因此如果使用标准宽度,则意味着-10px宽。
非常感谢!
答案 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将使单元格全宽。