滚动UICollectionView会导致父UIView中的UITableView将Collection View推出Frame

时间:2014-10-30 21:54:14

标签: ios uitableview uiview uicollectionview uiviewanimation

我的应用有一个小UIView隐藏在UINavigationBar后面。我设置了一个手势识别器,当点击导航栏时,这个“popover”UIView会向下移动到视图中,并且它下方的UITableView会下降以为其腾出空间。这很有效,但是当我尝试在集合视图中滑动以加载新单元格时,表格视图会将降低的视图推回到导航栏后面。

GIF

我试图在popover视图和表格视图中放置和lldb观察点,看看我是否可以跟踪视图框架更改,但我似乎永远不会达到观察点:

(lldb) w s v self->_drawerView->_layer
Watchpoint created: Watchpoint 3: addr = 0x7feac410b788 size = 8 state = enabled type = w
    watchpoint spec = 'self->_drawerView->_layer'
    new value: 0x00007feac410b850

(lldb) w s v self->_tableView->_layer
Watchpoint created: Watchpoint 2: addr = 0x7feac6008008 size = 8 state = enabled type = w
    watchpoint spec = 'self->_tableView->_layer'
    new value: 0x00007feac4102cf0

这是我的动画代码。我已经提交了断点并知道此代码不会导致此错误。

- (void)toggleDrawer:(UIGestureRecognizer *)recognizer {

    [UIView animateWithDuration:0.5 delay:0.0 usingSpringWithDamping:0.6f initialSpringVelocity:0.5f options:0 animations:^{
        if (lowerDrawer) {
            self.drawerView.frame = CGRectMake(self.drawerView.frame.origin.x, self.drawerView.frame.origin.y + 70, self.drawerView.frame.size.width, self.drawerView.frame.size.height);

            // lower table at same time
            self.tableView.frame = CGRectMake(self.tableView.frame.origin.x, self.tableView.frame.origin.y + 70, self.tableView.frame.size.width, self.tableView.frame.size.height - 70);

            // flip arrow
            self.arrowImageView.transform = CGAffineTransformMakeRotation(M_PI);

            lowerDrawer = NO;

        } else {
            self.drawerView.frame = CGRectMake(self.drawerView.frame.origin.x, self.drawerView.frame.origin.y - 70, self.drawerView.frame.size.width, self.drawerView.frame.size.height);

            self.tableView.frame = CGRectMake(self.tableView.frame.origin.x, self.tableView.frame.origin.y - 70, self.tableView.frame.size.width, self.tableView.frame.size.height + 70);

            // flip arrow
            self.arrowImageView.transform = CGAffineTransformMakeRotation(M_PI * 180);

            lowerDrawer = YES;
        }
    } completion:^(BOOL finished) {
        //
    }];
}

我该如何开始调试呢?有什么办法可以确保集合视图在加载新单元格时不会改变它的框架吗?

1 个答案:

答案 0 :(得分:1)

看起来这是您手动设置的坐标与Storyboard文件自动设置的坐标之间的冲突。

尝试检查您可能遇到的任何自动约束,或取消选中Storyboard Interface Builder中的“使用Autolayout”。