2016-01-27 17 views
7

Ho un UITableView (chiamiamolo tbl_A) all'interno di una cella di visualizzazione tabella la cui altezza è dinamica e impostata da UITableViewAutomaticDimension. Anche l'altezza della cella di tbl_A è dinamica e so che i dati di tbl_A non saranno eccessivi. Quindi voglio che tbl_A sia scroll disabilitato e il suo frame.size sia uguale alla sua dimensione del contenuto. Ho provato a impostare frame.size.height = tbl_A.contentSize.height di tbl_A, purtroppo l'altezza è sbagliata.Come rendere UITableView adatto alle dimensioni del contenuto

A proposito, non è necessario utilizzare UITableView per eseguire questa operazione. Voglio solo un modo per visualizzare tutti i dati. Eventuali suggerimenti?

Questo è l'effetto che voglio raggiungere: enter image description here

+0

Ho provato ogni soluzione Posso cercato @NicolasMiari lo apprezzerò se mi darai alcune parole chiave. – Yon

+0

@yon stai usando l'obiettivo c o swift? – gikygik

+0

@gikygik Sviluppo con swift – Yon

risposta

0
  1. Per il vostro caso è anche possibile utilizzare ScrollView.
  2. In quel ScrollView mentre l'aggiunta di ogni subcell tenere traccia di ogni subcell aggiungendo l'altezza di ogni subcell (prendere variabile come referenceHeight)
  3. finalmente impostare l'altezza ScrollView per l'altezza calcolata (referenceHeight)
-2

Nel tuo caso Tableview è la soluzione migliore, puoi usare diverse uitableviewcell e sezioni e puoi caricarlo in cellForRowAtIndexPath.

0

Di seguito è riportato un metodo per trovare le dimensioni del contenuto di TableView.

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

Assicurarsi che si chiama questo metodo dopo aver ricaricato il vostro tavolo come qui di seguito il codice.

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

Penso che questo 'contentSize' sia calcolato in base a' estimateRowHeight' che non è accurato. Alla fine, ho usato OAStackView come vista del contenitore. – Yon

+0

Puoi condividere la tua soluzione in dettaglio? sto lottando per lo stesso problema. – ARS

2

Finché lo scorrimento è bloccata, è possibile utilizzare il seguente per abbinare il layout del tableView dinamicamente .:

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

Di seguito presenta un modo per avere il layout automatico calcolare l'altezza per voi e fornire . una dimensione secondo le restrizioni si passa in un altro modo potrebbe essere la seguente:

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; 

precedenza avevo usato il sopra per espandere le cellule di ridimensionamento in modo dinamico con subv dinamica Iews in loro. Questo configura un vincolo di altezza in base alla dimensione del contenuto DOPO ricaricare il contenuto di tableView per garantire che il contenuto sia stato caricato prima di regolare la dimensione.

0

1) Aggiungi al vostro riferimento di classe a vincolo:

var heightC: NSLayoutConstraint! 

2) di scorrimento Disattiva e aggiungere vincolo altezza:

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

3) viewDidLayoutSubviews di override del vostro controller:

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

e imposta l'attributo "costante" del vincolo di altezza all'altezza del contenuto di tableview.

4) aggiornamento dei dati (per esempio quando il conteggio articolo cambia da 0 a more) solo forza principale vista controllore Layout:

view.setNeedsLayout() 
5

semplice;)

override var intrinsicContentSize: CGSize { 
    return contentSize 
} 
+0

puoi spiegare con maggiori dettagli? – ARS

+0

Dalla documentazione: 'L'impostazione di questa proprietà consente a una vista personalizzata di comunicare al sistema di layout la dimensione che vorrebbe essere basata sul suo contenuto. Https://developer.apple.com/documentation/uikit/uiview/1622600- intrinsiccontentsize – Emad

Problemi correlati