0

我希望重新排序的图形(三行)显示在 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];
        }
    }
}

第一次加载表格时工作得很好。但是,当单元格“重绘”时(例如前后滚动时),重新排序符号就会消失。

出了什么问题?

4

2 回答 2

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);
于 2013-03-07T02:15:28.067 回答
0

代码应该放在drawRect:UITableView 单元格的方法中,以便在单元格更新时调用它。绘制自己而不是视图应该是单元格的责任。

于 2013-03-07T00:48:30.250 回答