如何为uitableviewcell设置保证金

时间:2011-12-04 13:55:19

标签: iphone objective-c ios

如何在不创建全新自定义单元格的情况下以编程方式设置UITableViewCell的边距?

5 个答案:

答案 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;
           }
        }
    }
}

没有简单的方法来处理配件视图。 我一直在寻找一段时间,这是迄今为止我见过的最佳解决方案。