4

我有一个自定义的 TableViewCell。在单元格中,我在单元格的两侧添加了两个十字图标(使用 unicode)。当用户平移单元格时,它会在侧面显示十字图标。

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // add a cross
        _crossLabel = [self createCueLabel];
        _crossLabel.text = @"\u274C";
        _crossLabel.textAlignment = NSTextAlignmentLeft;
        // none of the following code works
        [self insertSubview:_crossLabel aboveSubview:self];
        [self insertSubview:_crossLabel belowSubview:self];
        [self addSubview:_crossLabel];

        _crossLabel2 = [self createCueLabel];
        _crossLabel2.text = @"\u274C";
        _crossLabel2.textAlignment = NSTextAlignmentLeft;
        [self addSubview:_crossLabel2];

        // add a pan recognizer
        UIGestureRecognizer* recognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
        recognizer.delegate = self;
        [self addGestureRecognizer:recognizer];
    }
    return self;
}

我使用上面的代码来实现这一点。_crossLabel 确实添加到了自定义 TableView 单元格。

我使用Reveal App检查了我的 iOS 应用程序的布局,我 在此处输入图像描述 可以看到 _crossLabel 已添加到我的单元格中。但我在 iOS 7 模拟器中看不到十字图标。我尝试了不同的方法来添加 subView,但它们都不起作用。

在此处输入图像描述

但它在 iOS6 上完美运行,当我签入 Reveal App 时,布局与 iOS 7 完全相同。

谢谢你的帮助。

4

2 回答 2

11

确保您添加到单元格的 contentView,[self.contentView addSubView:_crossLabel2];而不是单元格本身。在使用 Reveal 和检查 iOS7 时,您会看到,在 UITableViewCell 中,UIKit 已在单元格视图上方的 UITableViewCellSCrollView 中添加/滑动,因此请小心您的insertSubview:belowSubview调用。同样从您的 Reveal 的 OutlineView 的屏幕截图中,“LocationCell”视图显示为灰色,这意味着它是隐藏的。

编辑仅供将来参考:
在 iOS 7 中,新的 UITableViewCellScrollView 设置了它的“clipToBounds”属性。这是一个黑客,但如果你 [self.contentView.superview setClipsToBounds:NO] 。超级视图是 iOS7 上的 UITableViewCellScrollView 和 iOS6 上的单元格本身

于 2013-09-16T07:03:46.520 回答
-1

无需添加单元格内容视图。只需您可以使用 iOS7 访问子视图

[[cell.subviews lastObject] subviews]
于 2013-10-01T11:32:09.467 回答