我的应用有一个小UIView
隐藏在UINavigationBar
后面。我设置了一个手势识别器,当点击导航栏时,这个“popover”UIView
会向下移动到视图中,并且它下方的UITableView
会下降以为其腾出空间。这很有效,但是当我尝试在集合视图中滑动以加载新单元格时,表格视图会将降低的视图推回到导航栏后面。
我试图在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) {
//
}];
}
我该如何开始调试呢?有什么办法可以确保集合视图在加载新单元格时不会改变它的框架吗?
答案 0 :(得分:1)
看起来这是您手动设置的坐标与Storyboard文件自动设置的坐标之间的冲突。
尝试检查您可能遇到的任何自动约束,或取消选中Storyboard Interface Builder中的“使用Autolayout”。