iOS7 UIRefreshControl更改contentInset

Fog*_*ter 12 objective-c uitableview ios uirefreshcontrol

UINavigationController我的应用程序中有一个.该UINavigationBar设置为不透明和所有的滚动视图不酒吧的下面重叠.

在一个视图中,我有一个UITableView.所述的帧UITableView就是(0 0; 320 504)在我的iPhone 5.即,高度为568 - 64(导航栏和状态栏中的高度).

contentInsetUITableView(0, 0, 0, 0).当表视图首次加载contentOffsetis时(0, 0).

这可以.工作出色.

UIRefreshControl在表视图中添加了一个.这可以工作几次,但是经过几次拉动刷新之后,顶部的内容会在导航栏下"卡住".

当发生这种情况时,我会检查contentInset它,现在就是(-60, 0, 0, 0).

有没有办法阻止UIRefreshControl改变contentInset

jrt*_*ton 7

这可能UIRefreshControl是目前仅支持的原因UITableViewController,而不是添加到任何滚动视图(在许多情况下你可以使用它).

刷新控件通过修改scrollview的内容插入来实现其魔力 - 特别是当它结束刷新时.不幸的是,视图控制器还在修改滚动视图的内容插入,以使其适合半透明的导航和状态栏.随之而来的乐趣.这在iOS 6上也是一个问题(或者,在处理同样的问题时,我称之为"好旧的iOS6").

最快的解决方案可能是将您的表视图添加为子UITableViewController而不是简单的子视图.我认为UITableViewController在刷新结束时为您管理insets.如果这不起作用,我已经为此做了解决方法,但它必须等到我回到办公室.


Bru*_*ipe 7

我将在这里添加这个答案,以防任何人UIRefreshControl通过更改控件属性(属性标题,色调等等)出现问题:

做的不要乱UIRefreshControl-viewDidLoad:,使用-viewDidAppear:来代替.


sit*_*uee 5

重置表视图contentInset。

-(void)pullToRefresh
{
    [self.tableView reloadData];
    [self.refreshControl endRefreshing];
    [self.tableView setContentInset:UIEdgeInsetsMake(0, 0, 0, 0)];
}
Run Code Online (Sandbox Code Playgroud)