Ich habe eine View-Hierarchie, die so aussieht:
Im Grunde genommen habe ich eine NSSsplitView mit einer Unteransicht, die eine Bildlaufansicht (für eine Tabellenansicht) sowie eine Fußzeilenansicht mit drei Unteransichten enthält. Einige wichtige Dinge zu beachten:
NSClipView
der NSScrollView
ist eine spezielle Unterklasse, die eine Ebenenhosting Ansicht ist und eine CAScrollLayer
als Hintergrundebene verwendet. Ich bekomme ziemlich unberechenbares Verhalten mit diesem Layout. Hier sind die drei verschiedenen Szenarien, die ich bekomme, die jedes Mal randomize, wenn ich die App starte.
1) Alles erscheint OK. Hintergrundansicht und alle Inhalte sind da:
2) Die Schaltfläche erscheint gut, aber die Hintergrundansicht scheint teilweise transparent zu sein:
3) Die Hintergrundansicht wird richtig angezeigt, aber die Schaltfläche ist nicht mehr verfügbar:
Es gibt absolut keinen Code, der sich zwischen jedem dieser Szenarien ändert. Ich höre einfach auf und starte die App erneut. Ich habe sichergestellt, dass ich nichts zur Opazität zur Laufzeit ändere. Das einzige, was ich zur Laufzeit mache, sind die Hintergrundfarben und Bilder auf den Ansichten.
BEARBEITEN: Ich hatte das Gefühl, dass die überlappenden Ansichten Probleme verursachen könnten. Daher habe ich ohne Überlappung getestet und die gleichen Ergebnisse erzielt.
BEARBEITEN 2: Dies scheint ein Problem mit zPosition
der Ebenen der Layer-Backed-Ansichten zu sein. Die Reihenfolge ist verschlüsselt und zufällig. Wenn ich die zPosition der Ebenen manuell auf die richtigen Werte erzwinge, damit sie der Unteransichtsreihenfolge entsprechen, ist alles in Ordnung. Leider kann ich keinen saubereren Weg finden, dies zu tun, als nur zPosition
zu setzen.
Dies scheint ein OS X Bug zu sein. Ein Radar wurde archiviert . In der Zwischenzeit ist hier die beste Problemumgehung, die ich gefunden habe (wobei view
die Superansicht aller Geschwisteransichten ist):
view.subviews = [view.subviews copy]
Durch das Auslösen des Setters für subviews
wird das richtige zPosition
auf den Ansichtslayern festgelegt.
Tags und Links objective-c core-animation cocoa calayer nsview