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