2015-04-18 19 views
8

Hat XCode 6.3/Swift 1.2 zusätzliche Ränder zu einem ContentView der UITableViewCell hinzugefügt? Vor der Aktualisierung hatte ich eine benutzerdefinierte UIView, die sich in meinen Zellen über den ganzen Bildschirm erstreckte. Beispiel:XCode 6.3 Hinzufügen von Rändern zu Tableviewcell

enter image description here

nun alles in der Zelle scheint zusätzliche Margen zu haben, dass ich keine Ahnung, woher sie kamen.

enter image description here

Beachten Sie, dass diese Breiten Sicht nicht in Code in irgendeiner Weise verändert und rechts und links wie unten eingeschränkt:

enter image description here

Beachten Sie auch, dass ich tableView.separatorStyle = .None verwende. Ich füge diese Tatsache hinzu, weil es aus irgendeinem Grund in einem meiner tableView s, das das Standardtrennzeichen hat, scheint, diese zusätzlichen Ränder nicht hinzuzufügen.

Weiß jemand, ob sie irgendeine seltsame Änderung in XCode 6.3 gemacht haben? Dieses Verhalten trat direkt nach dem Aktualisieren auf.

Edit: enter image description here

+0

Ich habe diese App auf iOS 8 vor der Aktualisierung ausgeführt und es sah aus wie der erste Screenshot. – ad121

+0

Ich weiß nicht, was ich noch hinzufügen kann. Ich habe es gerade mit Constraints -16 auf jeder Seite getestet und es erstreckt sich korrekt über den Bildschirm, aber mir ist nicht bewusst, warum meine Ränder geschoben werden würden (ich möchte keinen Bandaid-Fix verwenden, ohne die Ursache so zu kennen) . Ich habe die Breite von contentView, view, tableView und Zelle selbst gedruckt und sie sind alle 375 auf iPhone 6, aber der blaue Block ist 359 Breite mit den Einschränkungen in der Frage gegeben. – ad121

+0

Aber warum haben Sie die Randbedingungen überhaupt erst geschaffen? Machen Sie sie zu den tatsächlichen Kanten der Inhaltsansicht, und Änderungen am Rand wirken sich nicht auf Sie aus. Ich weiß, dass das nicht die Grundfrage beantwortet, aber angenommen, dass die Ränder 8 sein werden und die Einschränkungen auf -8 zu kompensieren, war ziemlich nussig, um damit zu beginnen. – matt

Antwort

19

Achten Sie genau auf diesem Screenshot der Größe Inspektor für eine führende Einschränkung:

enter image description here

Sehen Sie, wie "Relativ zum Rand" aktiviert ist? Das ist dein Problem. Wenn sich der Rand ändert, ändert sich die linke Kante. Deaktivieren Sie den Menüeintrag und ändern Sie dann die Konstante auf Null. Tun Sie das auch für die nachfolgende Einschränkung, und Ihre Probleme werden vorbei sein.

Jetzt gehen wir auf das tiefere Problem ein: Was hat sich geändert? Du hast absolut recht, etwas hat getan. Ich glaube, sie haben einen Fehler behoben, und Sie haben sich in der Reparatur verfangen. Die Protokollierung zeigt mir, dass die Zelle preservesSuperviewLayoutMarginstrue ist und dass die Ränder der Tabelle 0,16,0,16 sind. Dies gilt auch für iOS 8.2, also sollten die effektiven Margen auf iOS 8.2 haben 16. Aber sie waren 8, als wären preservesSuperviewLayoutMarginsfalse. Aber in iOS 8.3 wird diese Einstellung richtig befolgt - mit dem Ergebnis, dass Sie beobachtet haben.

So andere Weg, um das Problem zu beheben gewesen wäre Ihre Zwänge zu belassen, wie sie sind, aber jede Zelle preservesSuperviewLayoutMargins-false in cellForRowAtIndexPath: einzustellen. Dies funktioniert genauso gut, um das Ergebnis in beiden Systemen identisch zu machen.

EDIT Gute Nachricht: Es sieht so aus, als ob diese Änderung in iOS 9 rückgängig gemacht wird. Somit würden Ihre Zellen ohne Änderung in iOS 9 genauso aussehen wie in iOS 8.2 und früher.

+0

Bearbeitet, um das zugrunde liegende Phänomen zu erklären: Sie hatten absolut Recht, die Margen haben sich geändert! Vielen Dank, dass Sie darauf hingewiesen haben. – matt

+0

... Nun, das war ein beeindruckendes Debugging! Musste alle Einschränkungen meiner Tabellenansichtszelle überprüfen. Das hat sie alle behoben. Vielen Dank. – nmdias

+0

Sie wurden wirklich von Apples neuen margenbasierten Beschränkungen erfasst. Wenn Sie eine Abhängigkeit zunächst mit der Funktion "Ziehen" definieren, wird diese marginbasiert, wenn Sie nicht die Optionstaste gedrückt halten, um die Nicht-Margin-Variante zu erhalten. Daher sind margenbasierte Beschränkungen eine Opt-out-Technologie; Sie können sich abmelden, aber die meisten Leute werden das nicht wissen und werden sie benutzen, ohne es zu merken. – matt

Verwandte Themen