我希望重新排序的图形(三行)显示在UITableViewCell的左侧,因为右侧将被重叠的UIView隐藏。
我发现这段代码:
- (void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
for(UIView* view in cell.subviews)
{
if([[[view class] description] isEqualToString:@"UITableViewCellReorderControl"])
{
// Creates a new subview the size of the entire cell
UIView *movedReorderControl = [[UIView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetMaxX(view.frame), CGRectGetMaxY(view.frame))];
// Adds the reorder control view to our new subview
[movedReorderControl addSubview:view];
// Adds our new subview to the cell
[cell addSubview:movedReorderControl];
// CGStuff to move it to the left
CGSize moveLeft = CGSizeMake(movedReorderControl.frame.size.width - view.frame.size.width, movedReorderControl.frame.size.height - view.frame.size.height);
CGAffineTransform transform = CGAffineTransformIdentity;
transform = CGAffineTransformTranslate(transform, -moveLeft.width, -moveLeft.height);
// Performs the transform
[movedReorderControl setTransform:transform];
}
}
}
第一次加载表时工作正常。 但是,当细胞被“重新绘制”时(比如前后滚动),重新排序的符号就会消失。
出了什么问题?
答案 0 :(得分:1)
您继续相对于当前位置移动重新排序控件
CGSize moveLeft = CGSizeMake(movedReorderControl.frame.size.width - view.frame.size.width, movedReorderControl.frame.size.height - view.frame.size.height);
所以它似乎将它移出屏幕。尝试存储初始帧,然后使用它来移动子视图:
CGSize moveLeft = CGSizeMake(initialFrame.width - view.frame.size.width, initialFrame.width.height - view.frame.size.height);
答案 1 :(得分:0)
代码应该放在UITableView单元格的drawRect:
方法中,以便在更新单元格时调用它。它应该是细胞自己绘制的责任,而不是视图。