12

我的应用程序中有一个UINavigationController。设置为不透明,UINavigationBar并且所有滚动视图都不会在栏下方重叠。

在一个视图中,我有一个UITableView. 框架UITableView(0 0; 320 504)我的 iPhone 5 上。即高度为 568 - 64(导航栏和状态栏的高度)。

的是。contentInset_ 当表格视图第一次加载时是.UITableView(0, 0, 0, 0)contentOffset(0, 0)

这可以。工作出色。

UIRefreshControl在表格视图中添加了一个。这工作了几次,但是在几次拉动刷新之后,顶部的内容就会“卡在”导航栏下。

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

有什么方法可以阻止 UIRefreshControl 更改contentInset

4

4 回答 4

7

UIRefreshControl这可能是目前仅支持的原因UITableViewController,而不是通过添加到任何滚动视图(在许多情况下您可以逃脱)。

刷新控件通过修改滚动视图的内容插入来发挥其魔力——尤其是在它结束刷新时。不幸的是,视图控制器也在修改滚动视图的内容插图,以使其适合半透明导航和状态栏。乐趣随之而来。这是否也是 iOS 6 上的一个问题(或者,我在处理同一问题时称之为“好旧的 iOS6”)。

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

于 2013-11-20T19:01:29.803 回答
7

我将在此处添加此答案,以防有人UIRefreshControl通过更改控件属性(属性标题、色调等)遇到问题:

不要乱用UIRefreshControlon -viewDidLoad:-viewDidAppear:改用。

于 2016-06-05T01:00:54.167 回答
5

重置您的表格视图 contentInset。

-(void)pullToRefresh
{
    [self.tableView reloadData];
    [self.refreshControl endRefreshing];
    [self.tableView setContentInset:UIEdgeInsetsMake(0, 0, 0, 0)];
}
于 2014-01-21T06:35:06.627 回答
4

你需要覆盖 setContentInset: 在你 UICollectionView

- (void)setContentInset:(UIEdgeInsets)contentInset {
  if (self.tracking) {
    CGFloat difference = contentInset.top - self.contentInset.top;
    CGPoint translation = [self.panGestureRecognizer translationInView:self];
    translation.y -= difference * 3.0 / 2.0;
    [self.panGestureRecognizer setTranslation:translation inView:self];
  }
  [super setContentInset:contentInset];
}
于 2015-02-27T14:28:13.560 回答