2013-10-21 72 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