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 并打开行,它看起来有点有趣。所以我想关闭选择样式。所以那里的代码是在行打开或关闭时打开和关闭选择样式。它可以工作,但奇怪的是,当调用 hideCustomControls 并且我原来的行滑回原位时,容器视图上的标签都消失了。我有一个显示的原始行的小边缘,当它显示时,标签就在那里。但是当该行一直滑动到位时,所有标签都消失了。同样在 containerView 上的 UISwitch 从来没有问题。它总是存在的。发生这种情况是否有原因?当我在这两种方法中删除 selectionStyle 代码时,这个问题就消失了。提前致谢。

编辑:我输入了正确的代码以使用 NSLayoutConstraint 进行动画处理。现在的问题是当我的行滑回原位时,我在下面的视图中的 UIView 子类显示到顶视图。不知道为什么会发生这种情况......

4

0 回答 0