为 UITableview 的高度设置动画时,滚动手势识别器保持相同大小
Posted
技术标签:
【中文标题】为 UITableview 的高度设置动画时,滚动手势识别器保持相同大小【英文标题】:When animating a UITableview's height, the scroll gesture recogniser stays the same size 【发布时间】:2014-01-29 17:40:42 【问题描述】:我已经四处寻找解决此问题的方法,但无济于事。
我遇到的问题是,当我在应用程序中为 UITableView 的高度设置动画时,可滚动区域的大小保持不变。 IE。如果您点击并拖动高度增加的 tableview 部分,则不会发生任何事情 - 但如果您点击并拖动 tableview 的小的原始框架,它会完美滚动。
我用来为tableview设置动画的代码如下:
[UIView animateWithDuration:0.3 animations:^
self.view.frame = extendedFrame;
self.tbl_body.frame = extendedFrame;
];
提前致谢!
【问题讨论】:
您在这里调整的视图到底是什么?UITableView
本身(所以这是一个子类),还是持有你的 UITableView
的视图?我问这个是因为你的表格实际上正在调整大小并不明显,如果你没有太多的单元格,你甚至可能不会注意到这一点。只是为了测试使表格的背景颜色与其容器的颜色不同。
抱歉我的错误,我遗漏了最重要的部分,哈哈。我正在扩展视图的框架以及作为子视图的 tableview
如果 tbl_body(表视图)在视图 (self.view) 内并且框架的原点不是 (0,0),那么表将有一个偏移量(对于原点的 x 和 y)。在结束表框架应该等于它的容器边界...)。还要测试(NSLog)动画之后帧的真实情况 - 如果您使用自动布局,使用帧时可能会很棘手。你做过不同颜色的测试吗?
嗨,是的,我已经记录了框架值以及切换的背景颜色,以测试框架和 tableview 框架是否相同并且一切正确。似乎只有手势识别器没有增加它的框架。我不使用自动布局,因为我在代码中做所有事情。
好吧,UITableview 属于一个子 ViewController,因此委托与 UISrollView 的委托不同,因此委托方法不会相互冲突。也就是说,我在想也许我忘了将它注册为子 ViewController,也许这会导致问题。我今天在另一个客户那里,但我回来后会测试。
【参考方案1】:
好的,我终于解决了这个问题,但仍然不太明白这个问题。
我可以修复它的唯一方法是在初始化时将框架设置为扩展框架,然后将其调整回最小化框架。只有当它被扩展时,手势识别器才是正确的大小。
我知道不完美,但由于缺乏更好的解决方案,我不得不这样做
【讨论】:
【参考方案2】:这是在黑暗中拍摄,但是...您是否尝试过使用完成块重新加载数据?
[UIView animateWithDuration:0.3 animations:^
self.tbl_body.frame = extendedFrame;
completion:^(BOOL finished)
[self.tbl_body reloadData];
];
【讨论】:
抱歉测试服务器暂时宕机了,等它恢复后会测试一下 我对此进行了测试,不幸的是它对我不起作用以上是关于为 UITableview 的高度设置动画时,滚动手势识别器保持相同大小的主要内容,如果未能解决你的问题,请参考以下文章
UIScrollView 有时会在更改内部 UITableView 的高度时失去滚动