2016-01-27 21 views
7

Mam UITableView (nazwijmy to tbl_A) wewnątrz komórki widoku tabeli, której wysokość jest dynamiczna i ustawiona przez UITableViewAutomaticDimension. Wysokość komórki tbl_A jest również dynamiczna i wiem, że dane tbl_A nie będą zbyt duże. Tak więc chcę, aby tbl_A był przewijany wyłączony, a jego rozmiar frame.size jest równy jego rozmiarowi treści. Próbowałem ustawić tbl_A's frame.size.height = tbl_A.contentSize.height, niestety wysokość jest błędna.Jak dopasować UITableView do rozmiaru zawartości?

Nawiasem mówiąc, nie muszę używać UITableView, aby wykonać to zadanie. Chcę tylko wyświetlić wszystkie dane. Jakieś sugestie?

To efekt chcę osiągnąć: enter image description here

+0

Próbowałem każde rozwiązanie Mogę wyszukiwać. @NicolasMiari Doceniam to, jeśli dasz mi kilka słów kluczowych. – Yon

+0

@yon używasz obiektywu c lub swift? – gikygik

+0

@gikygik Rozwijam się z szybkim – Yon

Odpowiedz

0
  1. w Twoim przypadku można również wykorzystać Scrollview.
  2. W tym Scrollview dodając każdy subcell śledzić każdego subcell dodając wysokość każdego subcell za (wziąć zmienna jak referenceHeight)
  3. wreszcie ustawić wysokość Scrollview przez obliczonej wysokości (referenceHeight)
-2

CASE tableview jest najlepszym rozwiązaniem, możesz użyć różnych komórek i sekcji demontowalnych i możesz je załadować w cellForRowAtIndexPath.

0

Poniżej znajduje się metoda znalezienia rozmiaru zawartości tableView.

- (CGFloat)tableViewHeightOfTable:(UITableView *)table 
{ 
    [table layoutIfNeeded]; 
    return [table contentSize].height; 
} 

Upewnij się, że wywołasz tę metodę po ponownym załadowaniu tabeli, jak poniżej.

[YourTable reloadData]; 
YourTable.frame.size.height = [self tableViewHeightOfTable:YourTable]; 
+0

Myślę, że ten "contentSize" jest obliczany na podstawie "estimatedRowHeight", który nie jest dokładny. W końcu użyłem OAStackView jako mojego widoku kontenera. – Yon

+0

Czy możesz udostępnić swoje rozwiązanie w szczegółach? walczę o ten sam problem. – ARS

2

Dopóki przewijanie jest zablokowane, można użyć następujących czynności, aby dopasować układ tableview dynamicznie .:

let size = actionsViewController.view.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize) 
    actionsViewController.view.frame.size = size 
    actionsViewController.preferredContentSize = size 

Poniżej przedstawiono sposób, aby mieć układ automatycznego obliczyć wysokość dla Ciebie i zapewniają . Państwo wielkość na podstawie ograniczeń przekazać w inny sposób mogłyby być następujące:

CGFloat leftViewHeight = 0; 
    if (self.isExpanded) { 
     [self.lineItemLineNumberListTableViewController.tableView layoutIfNeeded]; 
     UITableView *tableView = self.lineItemLineNumberListTableViewController.tableView; 
     CGSize tableViewContentSize = tableView.contentSize; 
     leftViewHeight = tableViewContentSize.height; 
    } 

self.leftViewHeightConstraint.constant = leftViewHeight; 

wcześniej stosowany przede rozszerzyć dynamicznie zmienić rozmiaru komórki z dynamicznym subv iews w nich. Konfiguruje to ograniczenie wysokości w oparciu o rozmiar zawartości po przeładowaniu zawartości tableView, aby upewnić się, że zawartość została załadowana przed dostosowaniem rozmiaru.

0

1) Dodaj do odniesienia klasy do przymusu:

var heightC: NSLayoutConstraint! 

2) Wyłącz zwój i dodać wysokość ograniczenia:

tableView.scrollEnabled = false 
heightC = tableView.autoSetDimension(.Height, toSize: 20) // using PureLayout library 

3) nadpisywania viewDidLayoutSubviews swojego kontrolera:

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 
    heightC.constant = tableView.contentSize.height 
} 

i ustaw atrybut "stała" wiązania wysokości na wysokość widoku tableview.

4) na odświeżanie danych (na przykład, gdy liczyć poz zmian od 0 do więcej) tylko wymuszenia widoku głównego kontrolera układ:

view.setNeedsLayout() 
5

Proste;)

override var intrinsicContentSize: CGSize { 
    return contentSize 
} 
+0

możesz wyjaśnić więcej szczegółów? – ARS

+0

Z dokumentacji: 'Ustawienie tej właściwości pozwala rzutem zwyczaju komunikować się z systemem układu jaki rozmiar chciałaby być oparta na jego content.' https://developer.apple.com/documentation/uikit/uiview/1622600- intrinsiccontentsize – Emad

Powiązane problemy