2014-10-09 12 views
14

Con il rilascio di iOS8 ho progettato la mia vista tabella con celle che sfruttano le celle di dimensionamento automatico. Ma ho bisogno che i miei tavoli funzionino anche su iOS7. Come lo faccio? C'è un modo per verificare se le celle di dimensionamento automatico sono supportate o meno in fase di runtime, oppure posso implementare alcuni metodi di deleghe di tabella nel mio controller che non verranno chiamati in iOS7?Come si supportano le celle con dimensionamento automatico su iOS7?

Se provo la mia tabella con celle di auto dimensionamento in iOS7 ottengo errori sulla console come questo:

Unable to simultaneously satisfy constraints. 
    Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSLayoutConstraint:0x7fc912d1d5a0 V:|-(>=11)-[UILabel:0x7fc912d13900] (Names: '|':UITableViewCellContentView:0x7fc912d13400)>", 
    "<NSLayoutConstraint:0x7fc912d1d6b0 V:[UILabel:0x7fc912d13900]-(11)-| (Names: '|':UITableViewCellContentView:0x7fc912d13400)>", 
    "<NSAutoresizingMaskLayoutConstraint:0x7fc912d24d80 h=--& v=--& V:[UITableViewCellContentView:0x7fc912d13400(0.5)]>" 
) 
+3

Non è possibile, iOS 7 non supporta le celle di auto-dimensionamento da iOS 8. Sarà necessario scrivere un 'tableView: heightForRowAtIndexPath:' dat calcola l'altezza corretta per la cella. – rckoenes

+0

Se è necessario supportare iOS7, non utilizzare la funzione di dimensionamento automatico. – CrimsonChris

+1

Capisco che le celle di dimensionamento automatico non sono supportate in iOS7. Il mio problema è cosa fare con le tabelle progettate per iOS8 utilizzando celle di dimensionamento automatico. Per esempio. tableView: heightForRowAtIndexPath: viene chiamato solo su iOS7 ma non su iOS8? In breve, come posso scrivere codice che funzioni sia per iOS7 che per iOS8? –

risposta

25

Questa è la soluzione che ho trovato finora, ma richiede il controllo di specifica il numero di versione piuttosto di capacità. È impostare solo UITableViewAutomaticDimension se si dispone di iOS 8 o superiore in versione:

override func viewDidLoad() { 

    if NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_7_1 { 
     self.tableView.estimatedRowHeight = 80 
     self.tableView.rowHeight = UITableViewAutomaticDimension 
    } 
} 

Per iOS 7 è necessario calcolare l'altezza per ogni cella. Ma se siete su iOS 8 è possibile tornare UITableViewAutomaticDimension come l'altezza:

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    if NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_7_1 { 
     return UITableViewAutomaticDimension 
    } 
    return 50 // Or whatever calculated value you need for cell height 
} 
+1

ha funzionato anche per me, ma ho dovuto aggiungere() attorno all'istruzione if. Inoltre non hai bisogno di altro se ritorni nel if. –

+1

Questo si interromperà per le versioni iOS più recenti di 7.1. Preferirei controllare le funzionalità (ad esempio usando 'respondsToSelector') o con <8.0. – DrMickeyLauer

+0

Come posso farlo per l'obiettivo c puoi pubblicare anche per quello –

1

Per le versioni iOS di età superiore a 8.0, si può sempre scrivere la solita heightForRowAtIndexPath metodo in cui si crea una cella, esegue passare un layout automatico su di esso e quindi restituire l'altezza effettiva.

Problemi correlati