2013-10-21 41 views
13

我使用像它的UIRefreshControl(无的UITableViewController):给一个顶部边界到UIRefreshControl

UIRefreshControl *refreshControl = [UIRefreshControl new]; 
[refreshControl addTarget:self action:@selector(viewDidBeginRefreshing:) forControlEvents:UIControlEventValueChanged]; 
[self.table addSubview:refreshControl]; 

问题是刷新轮位于下方的UINavigationController的半透明(ios7)巴。 在StackOverflow上关于此问题只有几个主题。他们没有给我带来任何有价值的解决方案。

我希望的是例如使我的UIRefreshControl的y位置下降80px。

注:我知道不建议在UITableViewController之外使用UIRefreshControl。所以不需要警告。

+0

可以很好地注意到,我的UITableView设置为自动布局,与其余视图一样,以编程方式。 (但不应该与它有任何关系) – AncAinu

回答

27

我找到了解决办法,很简单,不那么干净,但就像一个魅力。

只需要把刷新控制放在另一个子视图中。

UIView *refreshView = [[UIView alloc] initWithFrame:CGRectMake(0, 80, 0, 0)]; 
[self.table addSubview:refreshView]; 

UIRefreshControl *refreshControl = [UIRefreshControl new]; 
[refreshControl addTarget:self action:@selector(viewDidBeginRefreshing:) forControlEvents:UIControlEventValueChanged]; 
[refreshView addSubview:refreshControl]; 
+2

如上所示,确保在将'UIRefreshControl'作为子视图添加到容器'UIView'之前,将容器'UIView'添加到'UITableView'。反之亦然,它失败了。 – pechar

+0

''UIRefreshControl只能由UITableViewController'管理,我认为是由@pechar的问题引起的 – SimplGy

0

尝试在你的UIViewController添加这个在viewDidLoad中:

if ([self respondsToSelector:@selector(edgesForExtendedLayout)]) 
    self.edgesForExtendedLayout = UIRectEdgeNone; 
+0

它的工作原理,但...不是我想要的方式,它使导航栏不透明,并约束整个表。 – AncAinu