2013-01-06 11 views
8

Ich habe eine Ansicht Hierarchie, die wie folgt aussieht:unberechenbares Verhalten mit Schicht gesichert/Schicht NSViews Hosting

enter image description here

Also im Grunde habe ich eine NSSplitView mit einem Subview, die eine Scroll-Ansicht enthält (für eine Tabellenansicht) sowie eine Fußzeilenansicht mit 3 Unteransichten. Einige wichtige Dinge zu beachten:

  • Verwendet die 10,8 Basis SDK, keine automatische Layout
  • Der Fensterinhalt Ansicht, die geteilte Ansicht, die übergeordnete Sicht auf die Rolle und Fußzeile Ansichten, und die Scroll-Ansicht und Fußzeilenansicht sind alle Layer Backed mit einer NSViewContentsRedrawOnSetNeedsDisplay Redraw-Richtlinie.
  • Die NSClipView der NSScrollView ist eine spezielle Unterklasse, die eine Schicht hosting Ansicht ist und eine CAScrollLayer als Trägerschicht verwendet.
  • Die Farbansicht ist eine einfache Layer-Backed-Ansicht mit Hintergrundfarbe.
  • Die Hintergrund Ansicht ist eine Schicht-Hosting Ansicht, die eine Unterschicht mit dem Inhalt Eigenschaft auf ein Bild (contentsCenter ist auch gesetzt) ​​gesetzt hat
  • Die Seiten eine Schicht ist Backed Containeransicht, die eine einzelne Unteransicht enthält, eine benutzerdefinierte Layer-Backed Schaltflächenansicht (kein NSButton).
  • Die Fußzeile Ansicht überlappt die Scroll-Ansicht um etwa 3 Pixel

Ich bin mit diesem Layout ziemlich unberechenbares Verhalten zu bekommen. Hier sind die drei verschiedenen Szenarien, die ich bekomme, die jedes Mal randomize, wenn ich die App starte.

1) Alles erscheint OK. Hintergrund-Ansicht und alle Inhalte sind:

enter image description here

2) Die Taste erscheint in Ordnung, aber der Hintergrund Blick scheint zu sein, teilweise transparent:

enter image description here

3) Hintergrundansicht erscheint richtig aber der Knopf ist weg:

enter image description here

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 in den Ansichten.

EDIT: Ich hatte das Gefühl, dass die überlappenden Ansichten Probleme verursachen könnten, also habe ich ohne die Überlappung getestet und die gleichen Ergebnisse erhalten.

EDIT 2: Dies scheint ein Problem mit der zPosition der Schichten 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 für die Subview-Reihenfolge einstelle, ist alles in Ordnung. Leider kann ich keinen saubereren Weg finden, dies zu tun, als nur zPosition einzustellen.

+0

Führen Sie eine Beta von OS X? Ich hatte einige ziemlich schlimme Erfahrungen mit Layern und Layer-Backed Dings unter der 10.8.3 Beta. – CodaFi

+0

Nein, läuft 10.8.2 – indragie

Antwort

2

Dies scheint ein OS X Bug zu sein. A radar has been filed. In der Zwischenzeit, hier ist die beste Abhilfe, die ich gefunden (wo view die Super aller der Geschwister Ansichten ist):

view.subviews = [view.subviews copy]

Auslösen der Setter für subviews setzt die richtige zPosition auf die Ansicht Schichten.