4

カスタム TableViewCell があります。セルでは、セルの両側に (Unicode を使用して) 2 つのクロス アイコンを追加します。ユーザーがセルをパンすると、横に十字アイコンが表示されます。

- (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 シミュレーターに十字アイコンが表示されません。サブビューを追加するためにさまざまな方法を試しましたが、どれも機能しません。

ここに画像の説明を入力

しかし、iOS6 では完全に動作し、Reveal App をチェックインすると、レイアウトは iOS 7 とまったく同じです。

ご協力いただきありがとうございます。

4

2 に答える 2

11

[self.contentView addSubView:_crossLabel2];セル自体ではなく、セルの contentView に追加していることを確認してください。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 に答える