为 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 的高度时失去滚动

当单元格高度为动态时设置 UITableView 的高度

如何在没有重载数据的情况下更改uitableview中的高度单元格

在约束上动画更改 UITableView 节标题的高度

自定尺寸单元格高度变化导致跳跃动画

在 UICollectionView/UITableView 中为滚动视图的偏移设置动画会导致单元格过早消失