如何在不创建全新自定义单元格的情况下以编程方式设置UITableViewCell
的边距?
答案 0 :(得分:16)
您需要继承UITableViewCell
并覆盖layoutSubviews
方法:
- (void)layoutSubviews {
[super layoutSubviews];
CGRect tmpFrame = self.imageView.frame;
tmpFrame.origin.x += 10;
self.imageView.frame = tmpFrame;
tmpFrame = self.textLabel.frame;
tmpFrame.origin.x += 10;
self.textLabel.frame = tmpFrame;
tmpFrame = self.detailTextLabel.frame;
tmpFrame.origin.x += 10;
self.detailTextLabel.frame = tmpFrame;
}
答案 1 :(得分:2)
让UITableViewCell高于内容的开头是不是更有意义?如果你的内容总是100px高,只需让单元格110px获得你需要的额外10px空间,不需要自定义单元格:)
答案 2 :(得分:1)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
此方法将返回单元格,您可以在其中配置单元格。只需设置控件的框架,将它们移动到计算位置。
答案 3 :(得分:1)
要设置左边距,您可以使用:
- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath: (NSIndexPath *)indexPath
{
return 1;
}
答案 4 :(得分:1)
Andrey有一个很好的解决方案,但是如果你使用附件视图,你需要这个代码:
const int MARGIN = 16; // Left and right margin
- (void)layoutSubviews {
[super layoutSubviews];
/* Add left margin to the image and both labels */
CGRect frame = self.imageView.frame;
frame.origin.x += MARGIN;
self.imageView.frame = frame;
frame = self.textLabel.frame;
frame.origin.x += MARGIN;
frame.size.width -= 2 * MARGIN;
self.textLabel.frame = frame;
frame = self.detailTextLabel.frame;
frame.origin.x += MARGIN;
frame.size.width -= 2 * MARGIN;
self.detailTextLabel.frame = frame;
/* Add right margin to the accesory view */
if (self.accessoryType != UITableViewCellAccessoryNone) {
float estimatedAccesoryX = MAX(self.textLabel.frame.origin.x + self.textLabel.frame.size.width, self.detailTextLabel.frame.origin.x + self.detailTextLabel.frame.size.width);
for (UIView *subview in self.subviews) {
if (subview != self.textLabel &&
subview != self.detailTextLabel &&
subview != self.backgroundView &&
subview != self.contentView &&
subview != self.selectedBackgroundView &&
subview != self.imageView &&
subview.frame.origin.x > estimatedAccesoryX) {
// This subview should be the accessory, change its frame
frame = subview.frame;
frame.origin.x -= MARGIN;
subview.frame = frame;
break;
}
}
}
}
没有简单的方法来处理配件视图。 我一直在寻找一段时间,这是迄今为止我见过的最佳解决方案。