我的应用中有一个UINavigationController
。 UINavigationBar
设置为不透明,并且所有滚动视图都不会在条形图下方重叠。
在一个视图中,我有一个UITableView
。我的iPhone 5上UITableView
的框架是(0 0; 320 504)
,即高度为568 - 64(导航栏和状态栏的高度)。
contentInset
的{{1}}为UITableView
。当表格视图首次加载时,(0, 0, 0, 0)
为contentOffset
。
这很好。工作出色。
我在表格视图中添加了(0, 0)
。这可以工作几次,但是经过几次拉动刷新之后,顶部的内容会在导航栏下“卡住”。
如果发生这种情况,我会检查UIRefreshControl
,现在是contentInset
。
有没有办法阻止UIRefreshControl更改(-60, 0, 0, 0)
?
答案 0 :(得分:7)
我会在这里添加这个答案,以防任何人通过更改控件属性(属性标题,色调等等)来解决UIRefreshControl
问题:
请勿使用UIRefreshControl
上的-viewDidLoad:
,而是使用-viewDidAppear:
。
答案 1 :(得分:6)
这可能是UIRefreshControl
目前仅在UITableViewController
上受支持的原因,而不是添加到任何滚动视图(在许多情况下你可以放弃)。
刷新控件通过修改scrollview的内容插入来发挥其魔力 - 特别是当它结束刷新时。不幸的是,视图控制器还在修改滚动视图的内容插入,以使其适合半透明的导航和状态栏。随之而来的乐趣。这也是iOS 6上的一个问题(或者,当我处理同样的问题时,我称之为“好旧的iOS6”)。
最快的解决方案可能是将您的表视图添加为子UITableViewController而不是简单的子视图。我认为UITableViewController在刷新结束时为您管理insets。如果这不起作用,我已经为此做了解决方法,但它必须等到我回到办公室。
答案 2 :(得分:4)
重置您的表格视图contentInset。
-(void)pullToRefresh
{
[self.tableView reloadData];
[self.refreshControl endRefreshing];
[self.tableView setContentInset:UIEdgeInsetsMake(0, 0, 0, 0)];
}
答案 3 :(得分:3)
您需要在UICollectionView
中覆盖setContentInset :.- (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];
}