如何从UITableview边缘获取到UITableViewCell的padding

3
在iPad上,分组样式的tableview单元格与iPhone上的相比,更深地嵌入到tableview的边缘。我需要获取从tableview边缘到单元格开始的左右距离。我的意思类似于“边距”。我已经详细阅读了UITableview API,但找不到返回此内容的属性。我需要在计算中使用它来确定如何定位单元格中的内容。谢谢! Alex
2个回答

3

我没有测试过,但我非常确定你只需要拾取两者的框架,然后进行比较。

CGRect cellFrame = yourCell.frame;

CGRect tableFrame = yourUITableView.frame;

CGRect值包含(x坐标,y坐标,宽度,高度)

你也可以使用以下方式直接打印出框架:

 NSLog(@"your cell frame is %@",NSStringFromCGRect(yourCell.frame);
 NSLog(@"your table frame is %@",NSStringFromCGRect(yourUITableView.frame);

问题是:在调用tableView:willDisplayCell:forRowAtIndexPath:之前,frame将包含错误的值。在调用cellForRowAtIndexPath时,单元格尚未扩展到屏幕大小。因此,如果您在iPhone故事板中的cellForRowAtIndexPath上执行iPad上的cell.frame.width,则会获得320。它应该是750+。但是,如果您在willDisplayCell中执行cell.frame.width,则会获得正确的值。问题是,在那一点上为时已晚。我需要更早地获得边距。 - FranticRock
到目前为止,我找到的一个解决方法是:首先检测设备是否为iPad。如果是,我在我的计算中添加大约40个点作为填充。这绝不是一个稳健的解决方案。 - FranticRock

2

我通过覆盖iPad的layoutSubviews调用并将分组视图边距设置为我想要的值来解决了这个问题,而不是隐藏值。堆栈中的其他答案指出它的宽度可以从10到45像素不等。

In your CustomTableViewCell class
- (void)layoutSubviews
{
    CGRect f = self.bounds;
    f = CGRectInset(f, 10, 0);
    self.contentView.frame = f;
    self.backgroundView.frame = f;
}

你可以强制让contentView和backgroundView与TableCell的宽度相等,即TableView的宽度,但在这种情况下,我仍希望我的分组视图略微缩进。这还允许您更好地匹配自定义的页眉/页脚视图,而无需工作边缘到边缘。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接