UITableViewCell与UITableViewCellAccessoryDisclosureIndicator删除右边距

时间:2015-08-06 08:41:10

标签: ios uitableview ios8 autolayout

我使用autolayout UITableViewCell获取iOS 8中引入的动态单元格高度。 我设置了我的单元格并将accessoryType设置为UITableViewCellAccessoryDisclosureIndicator。我以编程方式进行所有布局。

我试过这样做: self.layoutMargin = UIEdgeInsetsZero;方法

UITableViewCell内的init

enter image description here

我想删除右边距或使用contentView resizing设置自定义值

1 个答案:

答案 0 :(得分:1)

编辑:添加了用于管理textLabel框架和detailTextLabel的代码。

您可以通过覆盖自定义单元格类中的layoutSubViews方法来实现此目的(如果您没有使用,请先创建一个并在表格视图中使用它)。将以下代码添加到表视图单元类.m文件中:

const int ACCESORY_MARGIN = -10;
const int LABEL_MARGIN = -10;

- (void)layoutSubviews {
    [super layoutSubviews];

    CGRect frame;
    frame = self.textLabel.frame;
    frame.origin.x += LABEL_MARGIN;
    frame.size.width -= 2 * LABEL_MARGIN;
    self.textLabel.frame = frame;

    frame = self.detailTextLabel.frame;
    frame.origin.x += LABEL_MARGIN;
    frame.size.width -= 2 * LABEL_MARGIN;
    self.detailTextLabel.frame = frame;

    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) {
                frame = subview.frame;
                frame.origin.x -= ACCESORY_MARGIN;
                subview.frame = frame;
                break;
            }
        }
    }
}

更改上面定义的常量以满足您的需求。

希望这有助于解决您的问题。感谢。