2014-05-13 52 views
0

我想在我的收藏視圖和表視圖的頂部添加UIView *separatorView,這會在相應視圖的contentOffset.y > 0出現時顯示。我通過添加viewDidLayoutSubviews中的視圖並將其添加到self.view來完成我的收藏視圖中的這項工作。然後通過使用一些滾動視圖委託方法,我可以讓它顯示和隱藏。這很好,但對於表格視圖,如果我使用相同的概念,那麼separatorView會與表格視圖一起滾動。我仍然將分隔符視圖添加到self.view,但它的行爲與集合視圖不同。我不要希望separatorView滾動。我希望它留在頂端。我是否正確地相信使這個表視圖工作的方法是子類UIViewController並在其中管理一個表視圖以及separatorView?有什麼方法可以使它在我目前的UITableViewController子類中工作?.view UITableViewController和UICollectionViewController的屬性

基本上,爲什麼self.view與表視圖滾動,而不是集合視圖?這似乎不一致。

感謝您的幫助。

編輯:添加圖片來演示想法。

enter image description here

+0

您需要做同樣的事情 - 處理滾動視圖委託方法並在滾動表格時不斷更新子視圖的位置。 – rmaddy

+0

@maddy在收集視圖中,我不需要更新子視圖的位置。在添加視圖時我將其設置了一次,並且在滾動時它從不移動。 –

回答

2
self.view

UITableViewControllerUITableView因爲tableViewController覆蓋loadView視圖控制器上。

如果您運行下面的代碼:

UITableViewController *tableViewController = [[UITableViewController alloc] init]; 

NSLog(@"%@",tableViewController.view); 

你會得到以下控制檯輸出:

2014-05-13 21:19:02.823 Test[28681:60b] <UITableView: 0x109834200; frame = (0 20; 320 548); clipsToBounds = YES; autoresize = W+H; gestureRecognizers = <NSArray: 0x109548f00>; layer = <CALayer: 0x109548c40>; contentOffset: {0, 0}> 

正如你所看到的,self.view不是UIView,而是它是UITableView。你的隔離視圖滾動使用的tableView因爲調用:

[self.view addSubview:separatorView]; 

是完全一樣的呼喚:

[self.tableView addSubview:separatorView]; 

如果你想要的分離停留在一個固定的位置,它需要被添加到tableView/collectionView的超級視圖,而不是滾動視圖本身。

之所以沒有發生在UICollectionViewController是因爲self.view實際上是一個UICollectionViewControllerWrapperView對象。這是一個私人班,但從名字來看,我認爲這是一個UIView,包裝UICollectionView

實現你想要的最明智的方法是使用custom container view (child view controller)這將是包含分隔視圖和tableView/collectionView控制器的UIViewController子類。

如果你不想添加一個子視圖控制器,那麼另一種方法就是像你說的那樣,創建一個UIViewController子類並在視圖控制器視圖中添加分隔視圖和tableView作爲子視圖,但是如果你不願意不使用UITableViewController你會失去獎勵功能,如自動調整tableView的contentInsets以獲得鍵盤外觀等。

+0

這似乎很奇怪,我可以在我的'UICollectionViewController'中添加一個子視圖到'self.view',它不會滾動。這是不一致的。我想我的解決方案就像我在我的問題中所說的那樣。將表視圖和分隔視圖添加到符合表視圖協議的「UIViewController」子類。感謝您的答覆。 –

+0

我已經更新了我的答案,爲您提供了更好的解釋 – liamnichols

+0

啊,謝謝。現在我明白他們爲什麼表現不同了。此外,謝謝你解釋爲什麼我的方法不理想,我會失去功能。 –

相關問題