2013-11-20 90 views
11

我在我的應用程序中有一個UINavigationControllerUINavigationBar被設置爲不透明,並且所有的滾動視圖在欄下方不重疊。我有一個UITableView。我的iPhone 5上的UITableView的框架爲(0 0; 320 504),即高度爲568 - 64(導航欄和狀態欄的高度)。iOS7 UIRefreshControl更改contentInset

UITableViewcontentInset(0, 0, 0, 0)。當表格視圖第一次加載contentOffset時是(0, 0)

這很好。精彩的工作。

我在表格視圖中添加了UIRefreshControl。這可以工作幾次,但是在拉幾次刷新之後,頂部的內容會在導航欄下面「卡住」。

發生這種情況時,我檢查了contentInset,現在是(-60, 0, 0, 0)

有沒有辦法阻止UIRefreshControl更改contentInset

+0

刪除我的答案,因爲你已經排除了它。你在打電話給endRefreshing,我想? – jhilgert00

+0

不用擔心。是的,當我在控件上調用'endRefreshing'時,它會消失。這可以很好地工作幾次,但它嚇壞了,'contentInset'更改隱藏導航欄下的前幾行。 – Fogmeister

+0

刷新後你可能會重置你的框架,但你不應該這樣做。 – jhilgert00

回答

6

這可能是爲什麼UIRefreshControl目前僅在UITableViewController上支持的原因,而不是通過添加任何滾動視圖(在許多情況下您可以省略)。

刷新控件通過修改scrollview的內容插入來實現它的魔力 - 特別是在刷新結束時。不幸的是,視圖控制器還修補了滾動視圖的內容插入,以適應半透明的導航和狀態欄。樂趣隨之而來。這也是iOS 6上的一個問題(或者,在處理相同問題時我稱之爲「舊版iOS6」)。

最快的解決方案可能是將您的表視圖添加爲子UITableViewController而不是簡單的子視圖。我認爲UITableViewController在刷新結束時爲你管理插入。如果這不起作用,我已經有了解決方法,但它必須等到我回到辦公室。

+1

我現在似乎已經解決了這個問題。我意識到'NSOperation'的'completionBlock'在與操作相同的線程上被調用。這就是我叫'endRefreshing'的地方。我將它發送給主線程,並且現在正在工作而不更改'contentInset'。你有沒有關於'UIRefreshControl'的任何鏈接只能正式支持'UITVC'? – Fogmeister

+0

文檔說它被分配給UITVC。 addSubview:事物僅在SO上提及,從未在文檔中提及。 – jrturton

+0

請參閱Dave DeLong對此答案的評論:http://stackoverflow.com/a/12502450/852828 – jrturton

3

重置您的表格視圖contentInset。

-(void)pullToRefresh 
{ 
    [self.tableView reloadData]; 
    [self.refreshControl endRefreshing]; 
    [self.tableView setContentInset:UIEdgeInsetsMake(0, 0, 0, 0)]; 
} 
2

你需要重寫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]; 
} 
+0

您提到的URL不再存在 – Nagarjun

6

我會通過改變控制特性(歸因標題,色調等,在此情況下,添加這個答案的任何人有問題UIRefreshControl .. 。):

不要惹的UIRefreshControl,改爲使用-viewDidAppear:

+1

確保您放置條件if(!refreshControl)否則每次出現您的頁面時都會向其添加refreshcontrol。 – George

+0

解決了我的問題,謝謝。 –