Iphone 如何使自定义绘制的UITableViewCell正确调整大小?

Iphone 如何使自定义绘制的UITableViewCell正确调整大小?,iphone,Iphone,出于性能原因,我在自定义视图中绘制UITableViewCell的字符串,该视图重写其drawRect方法,使用NSString:drawInRect直接在视图矩形中绘制字符串。这类似于苹果的TableViewSuite示例5-CustomTableViewCell 但是,当我在单元格上调用setEditing以打开“删除”按钮时,在动画完成后,视图将以压缩的外观结束。为了演示这一点,在上面提到的CustomTableViewCell示例上调用setEditing:YES并观察失真。有没有办法解

出于性能原因,我在自定义视图中绘制UITableViewCell的字符串,该视图重写其drawRect方法,使用NSString:drawInRect直接在视图矩形中绘制字符串。这类似于苹果的TableViewSuite示例5-CustomTableViewCell


但是,当我在单元格上调用setEditing以打开“删除”按钮时,在动画完成后,视图将以压缩的外观结束。为了演示这一点,在上面提到的CustomTableViewCell示例上调用setEditing:YES并观察失真。有没有办法解决这个问题,或者我应该恢复对文本使用UILabels吗?

我也有这个问题,在我的例子中,我通过处理drawRect方法中的两个状态来解决它,一个是编辑,另一个是不编辑。换句话说,我考虑了删除按钮的大小,并让我的UI以不同的方式重新绘制单元格。我不确定这是否是最有效的方法,但以下是我用来强制重新绘制的代码:

-(void)_refreshTableAndCells{
    //refresh the table
    [myCustomTableView reloadData];
    //refresh all the visible cells
    for (UITableViewCell *cell in myCustomTableView.visibleCells){
        LocationCellView *locationCell = [cell.contentView.subviews objectAtIndex:0];
        [locationCell setNeedsDisplay];
    }

}

不过,我是Objective-C n00b,因此我非常乐意有人提出比这更好的方法。

尝试将您自己的自定义视图(位于单元格的contentView内)的contentMode设置为
UIViewContentModeLeft
。“压缩”是由于默认的contentMode是
UIViewContentModeScaleToFill

UITableViewCell中的UIView也有类似的问题。我通过将UIView的
contentMode
更改为
UIViewContentModeLeft
解决了这个问题。(我用截图写了出来。)

我通常只修改我想在编辑或不编辑时有所不同的x和宽度值(或任何其他值)<开始编辑时,code>UITableView会自动调用
layoutSubviews
,这样您就不必在单元格中循环并自己操作

- (void)layoutSubviews {
    [super layoutSubviews];

    CGFloat editingPadding = 5.0;
    self.textLabel = CGRectMake((self.editing ? self.textLabel.frame.origin.x + editingPadding : self.textLabel.frame.origin.x), self.textLabel.origin.y, (self.editing ? self.textLabel.frame.size.width - editingPadding : self.textLabel.frame.size.width), self.textLabel.frame.size.height);
}