2014-09-24 10 views
13

Etwas ist mit unseren Tabellensicht-Zellentrennzeichen auf dem iPhone 6 Plus los. Ich habe ein leeres Testprojekt mit einer benutzerdefinierten Zelle mit nur einem Label und einer Einschränkung von 15pt für die Vorderkante erstellt.Etwas stimmt nicht mit dem iPhone 6 Plus tableView.separatorInset

iPhone 5S

Label and separator sind 30 Pixel (15pt) von der Vorderkante. Alles ist gut.

iPhone 5S

iPhone 6 Plus

Label ist 48 Pixel (15pt) von der Vorderkante und der Separator ist 60px (20pt) von der Vorderkante.

iPhone 6 Plus

Wenn ich log die tableView.separatorInset es ist 15pt auf dem iPhone 5S und 20pt auf dem 6 Plus. Die manuelle Einstellung des Inset auf 15 auf dem 6 Plus funktioniert nicht.

Bitte senden Sie Hilfe.

+0

Ich habe das gleiche Problem, auch nach dem letzten Update iOS 8.1.1. Das Seltsame ist, dass dies nur bei benutzerdefinierten Tabellenansichtszellen passiert. – zgosalvez

+0

Versucht dies auf einem iPad und es passiert auch. – zgosalvez

+0

Irgendeine Lösung gefunden? Ich habe das gleiche Problem. – Sam

Antwort

6

Überschreiben Sie die Methode LayoutMargins in Ihrer benutzerdefinierten Zellenklasse.

- (UIEdgeInsets)layoutMargins 
{ 
    return UIEdgeInsetsMake(0, 15, 0, 0); 
} 
+0

Was ist der bessere Weg, dies ohne eine harte Kodierungsnummer zu tun? – Sam

+0

Eine bessere Möglichkeit besteht darin, das Trennzeichen zu deaktivieren und eine benutzerdefinierte Ansicht als Trennzeichen hinzuzufügen. – Vidyalaxmi

+0

Für den richtigen Weg, um es zu tun, lesen Sie [diesen Beitrag] (http://StackOverflow.com/Questions/27420888/uebersetzbareZeile-mit-autolayout-left-margin-different-oni-iphone-and-ipad).Der Grund dafür ist, dass der größere linke Rand eines größeren Geräts wie 6 Plus oder iPad respektiert wird. Apple hat den Rand aus einem bestimmten Grund größer gewählt, also sieht es besser aus, und die Apps sollten das respektieren. – yilin

1

Keine perfekte Lösung, aber es hat für mich funktioniert.

@IBOutlet weak var leftViewLeadingConstraint: NSLayoutConstraint! 

override func viewWillLayoutSubviews() { 
    super.viewWillLayoutSubviews() 
    switch UIScreen.mainScreen().scale { 
    case 2: 
     leftViewLeadingConstraint.constant = 7.0 
    case 3: 
     leftViewLeadingConstraint.constant = 11.0 
    default: 
     assertionFailure("Error: wrong scale value") 
    } 
} 
+0

Ich weiß nicht, warum diese Antwort keine Stimmen bekommen hat. Es hat perfekt für mich funktioniert! Ich habe die Leading Edge-Einschränkung in der layoutSubviews-Methode in meiner UITableViewCell-Unterklasse angepasst, wenn die Skala 3 ist, und im Storyboard habe ich die Vorderkantenbedingung auf 12 gesetzt (ich denke, 11 ist falsch), wenn die Größenklasse Regular ist Breite x Beliebige Höhe. – Blip

1

ich von dieser Lösung behoben: http://qiita.com/mono0926/items/42f7a344b39e946abfe2

tableView.separatorInset.left Wert erhalten, sobald viewDidLayoutSubviews genannt.

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 
    notificationLabelLeft.constant = tableView.separatorInset.left 
} 
2

Wenn Sie ein Storyboard verwenden, wählen Sie den Inspektor für Tabellenansichtsattribute aus. Ändern Sie den

Separator Inset

zu

Individuelle

und lassen Sie die Standard-Marge als 15 links.

+0

Für IOS 9 funktionierte diese Lösung für mich. Ich verwendete eine benutzerdefinierte Zelle, die ein Etikett mit einer 15pt-Einschränkung für die Vorderkante enthielt. Der 15pt-Constraint funktionierte mit allen iPhones hervorragend, außer mit dem iPhone 6+ und dem iPad (das Label war nicht auf den Separatoreinsatz des TableViews ausgerichtet). Diese Lösung behebt das Problem jedoch. Vielen Dank! – xNightxOwl

+0

Funktioniert auch auf iOS 8. Die einfachste Lösung für mich. – Tuslareb

0

Machen Sie einfach diese Option der Tabelle zu false und es wird das gleiche auf allen Geräten, insbesondere auf dem iPad funktionieren.

cellLayoutMarginsFollowReadableWidth = false 
Verwandte Themen