iOS7s Unteransicht getrimmt, wenn außerhalb der übergeordneten Ansicht Grenzen [doppelt]

8

Ich habe durch neue UI-Informationen von Apple gepoltert - hat nicht geholfen.

Nun lassen Sie den Code und die Screenshots das Problem erkennen, das ich bekommen habe. Um sicherzustellen, dass das nicht mein Buggy-Code ist, habe ich ein neues Projekt mit einer einzigen Datei erstellt - einem UIViewController, der eine tableView-ID enthält. Die Delegierten sind festgelegt.

Ich mache folgendes:

%Vor%

Die Tabellenansicht ist auf gruppiert eingestellt. Lässt es auf iOS 6 laufen:

Duh natürlich, der Y-Ursprung ist negativ! Ja, ist es, und das ist das Ergebnis, das ich versuche zu erreichen. Lass uns sehen, was es auf iOS 7 zeigt:

Hinweis: Das tritt nicht auf, wenn wir redView zu einer normalen UIView hinzufügen.

Noch ein Hinweis: Wenn ich die Hintergrundfarbe von tableView blau anwähle, wären die grauen Linien zwischen den Abschnitten blau und nicht grau (als Beispiel dafür, dass das Grau kein gesetzter Header ist). Ein weiterer Hinweis: Das gleiche gilt für ipad.

Warum schneidet es in iOS 7 alles ab, was außerhalb der Grenzen liegt? Bitte helfen Sie!

    
Dumoko 18.09.2013, 09:43
quelle

3 Antworten

7

Dies liegt daran, dass iOS 7 einige Änderungen an der Ansichtshierarchie von UITableViewCells vorgenommen hat.

Früher war UITableViewCell view -> contentView .

Jetzt ist es eher wie UITableViewCell view -> scrollView -> contentView .

Die Lösung besteht darin, clipsToBounds = NO für die scrollView festzulegen (die standardmäßig auf YES gesetzt ist). Und die Art und Weise, dies zu erreichen, ist durch die Eigenschaft superview .

Also im Grunde in iOS6 und früher, um Inhalte aus den Zellgrenzen zu verschütten, würden Sie tun:

%Vor%

In iOS7 musst du auch verhindern, dass die Scrollview nicht überschneidet, also tust du etwas wie:

%Vor%

Und die rückwärtskompatible Lösung, die ich verwende, ist:

%Vor%

Beachten Sie, dass dies Hacky ™ ist und wenn sich die Ansichtshierarchie in iOS 8 erneut ändert, könnten Sie Probleme haben. Leider scheint es, dass Apple nicht möchte, dass wir Inhalte aus UITableViewCells verschütten, so dass AFAIK dies die einzige praktikable Lösung ist.

    
lms 27.09.2013 14:36
quelle
2

Folgendes wird es beheben:

cell.layer.masksToBounds = NO

Es wird jedoch wahrscheinlich etwas anderes brechen, z.B. Zellanimationen.

Das Problem, das Sie haben, liegt an der Tatsache, dass Zellen das Zeichnen von Inhalt nicht außerhalb ihrer Grenzen unterstützen (tatsächlich ist die Verwendung von Unteransichten, die die Grenzen ihrer Superview erweitern, immer eine hacky Lösung).

Der beste Rat ist, diese Funktionalität überhaupt neu zu gestalten und zu vermeiden.

Eine andere Lösung könnte darin bestehen, dieselbe Ansicht am Ende der vorherigen Zelle hinzuzufügen oder sie einfach als Unteransicht von UITableView direkt hinzuzufügen.

    
Sulthan 18.09.2013 10:27
quelle
2

Ich denke nicht, dass der Inhalt tatsächlich in masksToBounds -sense getrimmt wird, sondern dass die Ansichten von den anderen (undurchsichtigen) Zellen abgedeckt werden. Sie könnten versuchen, das Problem zu beheben, indem Sie die Reihenfolge ("z-Index") der Untersichten UITableView ändern, indem Sie bringSubviewToFront: und ähnliche Methoden verwenden, wenn eine Zelle erscheint, um sicherzustellen, dass die Zelle am unteren Rand des Bildschirms liegt ist die vorderste Sicht auf alle Zellen.

    
Theo 18.09.2013 10:33
quelle

Tags und Links