2016-01-27 10 views
7

Ich habe eine UITableView (nennen wir es tbl_A) innerhalb einer Tabellenansicht Zelle, deren Höhe dynamisch ist und durch UITableViewAutomaticDimension gesetzt. Die Zellenhöhe von tbl_A ist ebenfalls dynamisch und ich weiß, dass die Daten von tbl_A nicht zu viel sind. Also ich möchte, dass tbl_A scroll deaktiviert ist und seine frame.size entspricht seiner Inhaltsgröße. Ich habe versucht, tbl_A's frame.size.height = tbl_A.contentSize.height zu setzen, leider ist die Höhe falsch.Wie UITableView an die Größe des Inhalts angepasst werden kann

Übrigens muss ich UITableView nicht verwenden, um diese Aufgabe zu erfüllen. Ich möchte nur eine Möglichkeit, alle Daten anzuzeigen. Irgendwelche Vorschläge?

Dies ist der Effekt, den ich erreichen möchte: enter image description here

+0

habe ich versucht, jede Lösung Ich kann suchen. @NicolasMiari Ich werde es zu schätzen wissen, wenn Sie mir ein paar Stichworte geben. – Yon

+0

@yon verwenden Sie objective c oder swift? – gikygik

+0

@gikygik Ich entwickle mit swift – Yon

Antwort

0
  1. Für Ihren Fall auch Scroll verwenden Sie können.
  2. In diesem Scroll beim Hinzufügen von jeder Spur jeder Subzelle hält Subzelle jeden Subzelle Höhe durch Zugabe von (nehmen Variable als referenceHeight)
  3. schließlich die Scroll Höhe
-2

durch berechnete Höhe (referenceHeight) In Ihrem Fall Tableview ist die beste Lösung, Sie können verschiedene uitableviewcells und Abschnitte verwenden und sie in CellForRowAtIndexPath laden.

0

Unten finden Sie eine Methode, um die Inhaltsgröße von tableView zu finden.

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

Stellen Sie sicher, dass Sie diese Methode aufrufen, nachdem Sie Ihre Tabelle wie unten beschrieben neu geladen haben.

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

Ich denke, dass 'contentSize' auf der Grundlage von' geschätztRowHeight' berechnet wird, was nicht genau ist. Am Ende habe ich OAStackView als meine Containeransicht verwendet. – Yon

+0

Können Sie Ihre Lösung im Detail teilen? Ich kämpfe für das gleiche Problem. – ARS

2

Solange Scrollen gesperrt ist, können Sie die folgenden Funktionen entsprechen dem dynamischen Layout des Tableview verwenden .:

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

Im Folgenden wird eine Art und Weise Auto-Layout für Sie berechnen die Höhe haben und bieten . Sie eine Größe basierend auf Einschränkungen in Ihnen passieren könnte andere Möglichkeit, die folgenden sein:

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; 

ich zuvor die oben benutzt hatte, dynamisch Ändern der Größe Zellen mit dynamischer subv zu erweitern Sieht in ihnen aus. Dies konfiguriert eine Höhenbeschränkung basierend auf der Inhaltsgröße NACH dem erneuten Laden des Inhalts des TableViews, um sicherzustellen, dass der Inhalt vor dem Anpassen der Größe geladen wurde.

0

1) In der Klasse Verweis auf Zwang:

var heightC: NSLayoutConstraint! 

2) deaktivieren blättern und fügen Höhenbeschränkung:

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

3) Überschreibung viewDidLayoutSubviews des Controllers:

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

und setzen Sie das Attribut "constant" für die Höheneinschränkung auf die Höhe des Tabellenansichtsinhalts.

4) auf die Datenaktualisierung (zum Beispiel, wenn Artikel Änderungen zählen von 0 bis mehr) zwingen, nur Hauptsteuerung im Hinblick auf das Layout:

view.setNeedsLayout() 
5

Einfach;)

override var intrinsicContentSize: CGSize { 
    return contentSize 
} 
+0

können Sie mit mehr Details erklären? – ARS

+0

Aus der Dokumentation: 'Durch die Einstellung dieser Eigenschaft kann eine benutzerdefinierte Ansicht mit dem Layoutsystem kommunizieren, welche Größe basierend auf dem Inhalt festgelegt werden soll. Https://developer.apple.com/documentation/uikit/uiview/1622600- intrinsiccontentsize – Emad

Verwandte Themen