2015-08-09 18 views

Odpowiedz

7

Jeśli chcesz przejść z podejściem z pytaniem jesteś powiązany, a następnie:

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.collectionView?.addObserver(self, forKeyPath: "contentSize", options: NSKeyValueObservingOptions.Old, context: nil) 
} 

override func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject : AnyObject], context: UnsafeMutablePointer<Void>) { 
    if let observedObject = object as? UICollectionView where observedObject == self.collectionView { 
     print(change) 
    } 
} 

override func viewWillDisappear(animated: Bool) { 
    super.viewWillDisappear(animated) 
    self.collectionView?.removeObserver(self, forKeyPath: "contentSize") 
} 
6

SWIFT 3: wersja użytkownika @ Libeč odpowiedź

override func viewDidLoad() { 
    super.viewDidLoad() 
    collectionView.addObserver(self, forKeyPath: "contentSize", options: NSKeyValueObservingOptions.old, context: nil) 
} 

override func viewWillDisappear(_ animated: Bool) { 
    super.viewWillDisappear(animated) 
    collectionView.removeObserver(self, forKeyPath: "contentSize") 
} 

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { 
    if let observedObject = object as? UICollectionView, observedObject == collectionView { 
     print("done loading collectionView") 
    } 
} 
+0

Brakujące nawiasy po napisu „Gotowe ładowanego rzeczy ... " –

0

W moim przypadku problemem było to, widok kolekcji nie został w pełni ponownie załadowany, więc musimy poczekać, aż zakończy się widok kolekcji "reloadData":

self.customRecipesCV.reloadData() 

     DispatchQueue.main.async { 
      if let _index = self.selectCustomRecipeAtIndex { 
       let nextIndexpath = IndexPath(row:index, section:0) 
       self.customRecipesCV.scrollToItem(at: nextIndexpath, at: .centeredHorizontally, animated: true) 

      } 
     } 
1

późne odpowiedzieć,
Na viewDidAppear można je dostać przez:

float height = self.myCollectionView.collectionViewLayout.collectionViewContentSize.height; 

Może po ponownym wczytaniu danych Następnie należy obliczyć nową wysokość nowymi danymi, a następnie można je dostać przez: dodaj obserwatora słuchać gdy CollectionView zakończeniu danych za doładowanie w viewDidLoad:

[self.myCollectionView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionOld context:NULL]; 

Następnie dodać funkcję miech, aby uzyskać nową wysokość lub zrobić coś po CollectionView wykończone reload:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 
{ 
    //Whatever you do here when the reloadData finished 
    float newHeight = self.myCollectionView.collectionViewLayout.collectionViewContentSize.height;  
} 

I nie zapomnij usunąć obserwator:
Wpisz kod w viewWillDisappear

[self.myCollectionView removeObserver:self forKeyPath:@"contentSize" context:NULL]; 


Aby uzyskać więcej informacji prosimy zajrzeć do odpowiedzi https://stackoverflow.com/a/28378625/6325474

Powiązane problemy