5

我已经用谷歌搜索了很多关于这个问题,但似乎没有答案。所以我希望你们中的一些人可能知道如何处理这个问题。我有一个具有 tableview 的视图控制器,当我用动画更改视图框架时,一切都很顺利,除了一种特殊情况,当 tableview 的项目超过它可以适应屏幕时,并且只有当 tableview 滚动到底部时。然后,如果我缩小视图高度,我的视图会正确设置动画,但 tableview 会以某种方式向上跳跃,然后才会动画到底部。

如果我缩小视图,但 tableview 没有滚动到底部(即使我可以看到最后一个单元格,也可以说是它的一半多一点),它的动画效果确实正确。

我已经尝试了几件事,比如打开和关闭自动调整蒙版以及从当前状态设置动画或类似的东西,但这没有帮助:/

那么有什么建议可能是什么问题?

编辑:

我用来改变框架的代码

[UIView animateWithDuration:0.5
                          delay:0.0
                        options: UIViewAnimationCurveEaseOut
                     animations:^{

                         [_contView setFrame:CGRectMake(0, 0, 320, 420)];
                     } 
                     completion:^(BOOL finished){

                     }];
4

4 回答 4

2

我与同样的错误斗争了一段时间,然后才意识到我一生都无法弄清楚它为什么会发生……直到我找到了一个非常详细的解释和解决方案。

完整的文章可以在这里找到:http: //lists.apple.com/archives/cocoa-dev/2012/Apr/msg00341.html

快速解决方案是更改 contentInset 而不是表格视图框架。只需将您正在显示的任何内容(即键盘或广告横幅视图)的高度添加到 contentInset.bottom 属性。滚动区域将增加以适应所需的调整大小。

在此示例中,我在 tableview 顶部显示了一个广告横幅视图:

UIEdgeInsets insets = myTable.contentInset;
insets.bottom += 50;   // 50px is the height of the ad banner view
myTable.contentInset = insets;
于 2012-12-20T05:45:27.127 回答
1

I used to have a similar problem and I implemented this workaround (Disclaimer: this is a hack to a currently-unresolved iOS bug):

// check if the table view is scrolled to the bottom
if (tableView.contentOffset.y + tableView.frame.size.height == tableView.contentSize.height) {
    // if it is, shift the table view contents up one pixel
    [tableView setContentOffset:CGPointMake(tableView.contentOffset.x, tableView.contentOffset.y - 1) animated:NO];
}

// call the animation block afterwards here

It's a hack, though not noticeable to the user since it's just a 1 pixel motion. UITableView has a few bugs (reported to Apple already, but not yet resolved) when it comes to animations from a scrolled-to-bottom position.

于 2012-12-27T15:16:40.493 回答
0

您应该使用 xcode 右侧的 xib 自动调整大小...我认为这可能会对您有所帮助。在此处输入图像描述

于 2012-12-20T06:04:11.003 回答
0

尝试将页脚视图添加到高度非零的表格中。

于 2014-04-24T09:49:51.600 回答