2014-10-09 8 views
14

Mit der Veröffentlichung von iOS8 habe ich meine Tabellenansicht mit Zellen entwickelt, die die Vorteile von Self-Sizing-Zellen nutzen. Aber ich brauche meine Tabellen auch in iOS7. Wie mache ich das? Gibt es eine Möglichkeit zu überprüfen, ob Self-Sizing-Zellen in Laufzeit unterstützt wird oder nicht, oder kann ich einige Tabellendelegate-Methoden in meinem Controller implementieren, die nicht in iOS7 aufgerufen werden?Wie unterstütze ich Self-Sizing-Zellen auf iOS7?

Wenn ich meinen Tisch versuchen, mit Selbst Sizing Zellen in iOS7 bekomme ich Fehler auf der Konsole wie folgt aus:

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

Sie können nicht, iOS 7 unterstützt die Selfsizing-Zellen von iOS 8 nicht. Sie müssen ein 'tableView: heightForRowAtIndexPath schreiben:' dat berechnet die korrekte Höhe für die Zelle. – rckoenes

+0

Wenn Sie iOS7 unterstützen müssen, verwenden Sie nicht die Funktion zur automatischen Größenanpassung. – CrimsonChris

+1

Ich verstehe, dass Self-Sizing-Zellen in iOS7 nicht unterstützt werden. Mein Problem ist, was mit Tabellen zu tun ist, die für iOS8 mit Self-Sizing-Zellen entwickelt wurden. Z.B. Wird tableView: heightForRowAtIndexPath: nur auf iOS7 aber nicht auf iOS8 aufgerufen? Kurz gesagt, wie schreibe ich Code, der sowohl für iOS7 als auch iOS8 funktioniert? –

Antwort

25

Dies ist die Lösung, die ich bisher gefunden habe, aber es erfordert für bestimmte Versionsnummer überprüft eher als Fähigkeit. Sie setzen nur UITableViewAutomaticDimension, wenn Sie iOS 8 oder höher als Version haben:

override func viewDidLoad() { 

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

Für iOS 7 Sie für jede Zelle eine Höhe berechnen müssen. Aber wenn Sie sind auf iOS 8 können Sie UITableViewAutomaticDimension wie die Höhe zurück:

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

Arbeitete für mich auch, aber ich musste hinzufügen() 's um die if-Anweisung. Auch brauchst du sonst nicht, wenn du im if zurückkommst. –

+1

Dies wird für iOS-Versionen jünger als 7.1 brechen. Ich würde lieber nach Features suchen (d. H. Mit 'reaymToSelector') oder mit <8.0. – DrMickeyLauer

+0

Wie kann ich das für objektive c tun können Sie dafür auch Posten –

1

Für iOS-Versionen älter als 8.0, können Sie immer die übliche heightForRowAtIndexPath Methode schreiben, in dem Sie eine Zelle zu erstellen, führen eine automatische Layout auf es passieren und dann die tatsächliche Höhe zurückgeben.

Verwandte Themen