弹出视图控制器后UITableViewController奇怪的行为

swi*_*ode 9 scroll objective-c uitableview ios

UITableView有一堆重复使用的细胞,当我对其中一个水龙头,它带我到另一个视图控制器(通过推送赛格瑞),显示该单元格的细节(我们说这是一个项目,所以它会显示有关项目的详细信息 - 名称,价格,图像等......).当我弹出那个视图控制器时(通过点击后退按钮),UITableView有一个奇怪的行为:

a)如果它一直滚动到底部,它将自动滚动(大约50点),使最后一个单元格几乎不可见,所以我必须再次向下滚动.我的牢房全高60分.

b)滚动条总是显示然后消失,表示某些东西正在移动UITableView(虽然如果没有滚动到底部,内容将不会自动移动).

这发生在UITableView我的应用程序中的多个.我没有强制在viewWillAppear中重新加载表视图,所以我不明白发生了什么.从服务器加载后,我的内容是静态的(除非用户更改它,然后执行重新加载).但只是显示项目的详细信息并弹出该VC不会改变表格视图中的任何内容.

编辑:好的,我已经弄清楚问题是什么:我UIToolbar在推动那个segue时隐藏了一个.如果我把它总是可见的(我不希望),它仍然显示滚动条在我的表视图弹出,但如果在最后几排不滚动表视图时动画.

Pra*_*sad 7

将以下内容添加到viewDidLoad.

self.automaticallyAdjustsScrollViewInsets = NO;
Run Code Online (Sandbox Code Playgroud)

这解决了我在导航回视图控制器后向下移动的问题.


swi*_*ode 3

我设法解决了第一个问题。看起来 tableview 没有考虑到 的 44 个点UIToolbar

将表视图偏移量保存在prepareForSegue:(将其保存在CGPoint属性中)

self.tableViewScrollOffset = self.tableView.contentOffset;
Run Code Online (Sandbox Code Playgroud)

然后,在 中viewWillAppear:检查是否已被修改。如果是这样,请恢复它。

if(self.tableView.contentOffset.y != self.tableViewScrollOffset.y) {
        [self.tableView setContentOffset:self.tableViewScrollOffset];
        self.tableViewScrollOffset = CGPointZero;
    }
Run Code Online (Sandbox Code Playgroud)