1

UITableViewCell のカスタム サブクラスがあります。私のストーリーボードには、基本的に、いくつかのラベルが付いた containerView (UIView *) と UISwitch があります。tableViewCell を右にスライドして containerView の下にいくつかの詳細コントロールを表示するジェスチャを追加してから、元のビューをスライドして戻す別のジェスチャを追加します。アニメーション コードは次のようになります。

- (void)showCustomControls:(UISwipeGestureRecognizer *)gesture {
    [UIView animateWithDuration:0.3 animations:^{
        [self.containerView setFrame:CGRectMake(self.frame.size.width - kTableViewCellSwipedWidth, 0, self.frame.size.width - kTableViewCellSwipedWidth, kOverviewTableViewCellHeight)];
    }completion:^(BOOL finished) {
        self.isReveal = YES;
        self.selectionStyle = UITableViewCellEditingStyleNone;
    }];
}

- (void)hideCustomControls:(UISwipeGestureRecognizer *)gesture {
    [UIView animateWithDuration:0.3 animations:^{
        [self.containerView setFrame:CGRectMake(-kTableViewCellBounceWidth, 0, self.frame.size.width, kOverviewTableViewCellHeight)];
    }completion:^(BOOL finished) {
        [UIView animateWithDuration:0.1 animations:^{
            [self.containerView setFrame:CGRectMake(-kTableViewCellBounceWidth / 2, 0, self.frame.size.width, kOverviewTableViewCellHeight)];
        }completion:^(BOOL finished) {
            [self.containerView setFrame:CGRectMake(0, 0, self.frame.size.width, kOverviewTableViewCellHeight)];
        }];

        self.isReveal = NO;
        self.selectionStyle = UITableViewCellSelectionStyleBlue;
    }];
}

行を開いたまま selectionStyle をオンのままにしておくと、ちょっとおかしなことに気づきました。だから私はselectionstyleをオフにしたかった。したがって、そこにあるコードは、行が開いているか閉じているときに選択スタイルをオンまたはオフにすることです。それは機能しますが、奇妙なことに、hideCustomControls が呼び出され、元の行がスライドして元の位置に戻ると、コンテナー ビューのラベルがすべて消えてしまいます。元の行の少し端が表示されています。それが表示されている場合、ラベルはそこにあります。しかし、行が所定の位置に完全にスライドすると、すべてのラベルが消えます。ただし、containerView にもある UISwitch には問題はありません。それは常に存在します。これが起こっている理由はありますか?両方の方法で selectionStyle コードを削除すると、この問題はなくなります。前もって感謝します。

編集: NSLayoutConstraint を使用してアニメーション化する正しいコードを入力しました。ここでの問題は、下のビューにある UIView サブクラスが、行がスライドして元の位置に戻ると、トップ ビューに表示されることです。なぜこれが起こるのか分かりません...

4

0 に答える 0