iOS7 UIRefreshControl更改contentInset
我在我的应用程序中有一个UINavigationController
。 UINavigationBar
被设置为不透明,并且所有的滚动视图在栏下方不重叠。我有一个UITableView
。我的iPhone 5上的UITableView
的框架为(0 0; 320 504)
,即高度为568 - 64(导航栏和状态栏的高度)。iOS7 UIRefreshControl更改contentInset
UITableView
的contentInset
是(0, 0, 0, 0)
。当表格视图第一次加载contentOffset
时是(0, 0)
。
这很好。精彩的工作。
我在表格视图中添加了UIRefreshControl
。这可以工作几次,但是在拉几次刷新之后,顶部的内容会在导航栏下面“卡住”。
发生这种情况时,我检查了contentInset
,现在是(-60, 0, 0, 0)
。
有没有办法阻止UIRefreshControl更改contentInset
?
这可能是为什么UIRefreshControl
目前仅在UITableViewController
上支持的原因,而不是通过添加任何滚动视图(在许多情况下您可以省略)。
刷新控件通过修改scrollview的内容插入来实现它的魔力 - 特别是在刷新结束时。不幸的是,视图控制器还修补了滚动视图的内容插入,以适应半透明的导航和状态栏。乐趣随之而来。这也是iOS 6上的一个问题(或者,在处理相同问题时我称之为“旧版iOS6”)。
最快的解决方案可能是将您的表视图添加为子UITableViewController而不是简单的子视图。我认为UITableViewController在刷新结束时为你管理插入。如果这不起作用,我已经有了解决方法,但它必须等到我回到办公室。
我现在似乎已经解决了这个问题。我意识到'NSOperation'的'completionBlock'在与操作相同的线程上被调用。这就是我叫'endRefreshing'的地方。我将它发送给主线程,并且现在正在工作而不更改'contentInset'。你有没有关于'UIRefreshControl'的任何链接只能正式支持'UITVC'? – Fogmeister
文档说它被分配给UITVC。 addSubview:事物仅在SO上提及,从未在文档中提及。 – jrturton
请参阅Dave DeLong对此答案的评论:http://stackoverflow.com/a/12502450/852828 – jrturton
重置您的表格视图contentInset。
-(void)pullToRefresh
{
[self.tableView reloadData];
[self.refreshControl endRefreshing];
[self.tableView setContentInset:UIEdgeInsetsMake(0, 0, 0, 0)];
}
你需要重写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];
}
您提到的URL不再存在 – Nagarjun
我会通过改变控制特性(归因标题,色调等,在此情况下,添加这个答案的任何人有问题UIRefreshControl
.. 。):
不要惹的UIRefreshControl
,改为使用-viewDidAppear:
。
确保您放置条件if(!refreshControl)否则每次出现您的页面时都会向其添加refreshcontrol。 – George
解决了我的问题,谢谢。 –
删除我的答案,因为你已经排除了它。你在打电话给endRefreshing,我想? – jhilgert00
不用担心。是的,当我在控件上调用'endRefreshing'时,它会消失。这可以很好地工作几次,但它吓坏了,'contentInset'更改隐藏导航栏下的前几行。 – Fogmeister
刷新后你可能会重置你的框架,但你不应该这样做。 – jhilgert00