出于性能原因,我在自定义视图中绘制UITableViewCell的字符串,该视图覆盖其drawRect方法,使用NSString:drawInRect直接在视图矩形中绘制字符串。这类似于Apple的TableViewSuite示例5-CustomTableViewCell。
但是,当我在单元格上调用setEditing以显示删除按钮时,视图在动画完成后以挤压外观结束。为了演示这一点,请在上面提到的CustomTableViewCell示例上调用setEditing:YES并观察失真。有什么方法可以解决这个问题,还是应该恢复使用UILabel作为我的文本?
答案 0 :(得分:5)
我在UITableViewCell中遇到了与UIView类似的问题。我通过将UIView的contentMode
更改为UIViewContentModeLeft
来解决它。 (我用屏幕截图写了here。)
答案 1 :(得分:2)
我也有这个问题,在我的情况下,我通过处理drawRect方法中的2个状态来修复它,一个是编辑,另一个是不编辑。换句话说,我考虑了删除按钮的大小,并让我的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,所以我很高兴有人建议比这更好的方法。
答案 2 :(得分:1)
我通常只是在编辑时修改我想要的不同的x和宽度值(或其他任何值)。开始编辑时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);
}
答案 3 :(得分:0)
尝试将您自己的自定义视图(位于单元格的contentView内)的contentMode设置为UIViewContentModeLeft
。 “挤压”是由于默认contentMode为UIViewContentModeScaleToFill
。