2016-07-29 12 views
5

Aktualnie pracuję nad aplikacją do nauki programowania iOS i Swift. Mam widok, który zawiera dwa główne widoki, MKMapView i UITableView. Kiedy wybrana jest pewna adnotacja w MapView, chcę, aby pewne komórki w TableView były ukryte. Jeśli zaznaczenie nie jest zaznaczone, komórki powinny się ponownie pojawić. Obecnie robię to, ustawiając wysokość komórek do ukrycia na 0 i wywołując tableView.beginUpdates()tableView.endUpdates(), jednak powoduje to przerywanie wszystkich rodzajów ograniczeń AutoLayout wewnątrz moich komórek niestandardowych. Próbowałem również ustawić właściwość ukrytą w komórce na wartość true przed ustawieniem wysokości na 0, ale więzy AutoLayout nadal są łamane.Jak ukryć UITableViewCells, nie naruszając ograniczeń AutoLayout

Jaki byłby właściwy sposób, aby to zrobić?

Z góry dziękuję.

+0

To dobry sposób przechowywania dwóch różnych tablic jako źródła danych widoku tabeli. Pierwsze mają wszystkie dane, które można wyświetlić. Drugi jest prawdziwym źródłem danych tablicy widoku tabeli. Po kliknięciu adnotacji można odnowić drugą tablicę (wstawiając lub usuwając dane, które muszą być lub nie są wyświetlane), pobierając dane z pierwszej tablicy. Widok tabeli zostanie ponownie załadowany dopiero na końcu. –

+0

W ten sposób zaimplementowałem na początku mój ViewController, ale nie mogłem dowiedzieć się, jak mogę animować znikanie komórek podczas aktualizacji drugiej tablicy. Jestem otwarty na sugestie, w jaki sposób mogę animować tę zmianę. –

Odpowiedz

2

moje 2 centy: wystarczy spróbować obniżyć priorytet jednego z kolidujących ograniczeń Do niższa wartość, taka jak UILayoutPriorityDefaultHigh (750 jeśli jest używana w Interface Builder) lub nawet mniejsza, zależy od tego, w jaki sposób twoja komórka jest złożona. Powinno wystarczyć, aby system układu automatycznego wskazał, które ograniczenie można bezpiecznie złamać. Prawdopodobnie będziesz chciał złamać wiązanie, które definiuje odległość od dolnego marginesu.

+0

To rzeczywiście ograniczenia określały odległość od dna, która dawała kłopoty. Zastąpiłem go innym ograniczeniem, które skutkuje tym samym układem. Dzięki! –

1

Implementacja heightForRowAtIndexPath: jak poniżej. również trzeba ustawić ograniczenie wysokości do 0

objc wersji

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (shouldHideCell) 
     return 0; 
    } 
    else { 
     return UITableViewAutomaticDimension; 
    } 
} 

wersji Swift

 override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    if shouldHideCell { 
      return 0 
     } else { 
      return UITableViewAutomaticDimension 
     } 
    } 
+0

Ach, powinienem był jaśniej powiedzieć, które ograniczenia są złamane. Ograniczenia w komórce są zerwane, gdy wysokość jest ustawiona na 0. Nawiasem mówiąc, wiersze w Swift nie powinny kończyć się znakiem ';'. –

+0

Nie jestem szybkim programistą. Teraz został usunięty. Gdy komórka układu automatycznego włączonego z domyślnym ograniczeniem wysokości zostanie dodana do widoku zawartości komórki. Jeśli nie zaimplementujesz 'heightForRowAtIndexPath()', ograniczenie zostanie zakwestionowane z twoim ograniczonym widokiem podklas – Rajesh

+0

Naprawiłem problem, zastępując pewne ograniczenie mniej ograniczającym, które wciąż wykonuje zadanie, ale dzięki pomocy. –

Powiązane problemy