2013-01-06 91 views
8

反常行爲我有一個看起來像這樣的視圖層次:與層支持/層託管NSViews

enter image description here

所以基本上我有一個NSSplitView與包含滾動視圖(表視圖一個子視圖)以及包含3個子視圖的頁腳視圖。一些重要的事情需要注意:

  • 採用10.8基地SDK,沒有自動佈局
  • 窗口的內容視圖,拆分視圖中,滾動和頁腳視圖的父視圖和滾動視圖頁腳視圖都是圖層支持NSViewContentsRedrawOnSetNeedsDisplay重繪策略。
  • NSScrollViewNSClipView是一個特殊的子類,它是圖層託管視圖並使用CAScrollLayer作爲支持圖層。
  • 顏色視圖是一個簡單的圖層背景視圖,它具有背景顏色集。
  • 背景視圖層託管視圖,其具有與所述內容屬性設置爲一個圖像(contentsCenter也設置)
  • 內容的瀏覽一個子層是一個層支持包含單個子視圖的容器視圖,自定義圖層支持按鈕視圖(不是NSButton)。
  • 頁腳視圖約3個像素

我越來越漂亮的反常行爲與此佈局重疊滾動視圖。以下是我收到的三個不同場景,每次啓動應用程序時都會隨機化。

1)一切都顯示OK。背景視圖和所有的內容是否有:

enter image description here

2)按鈕出現細,但背景視圖似乎是部分透明的:

enter image description here

3)背景視圖顯示正確但按鈕不見了:

enter image description here

絕對沒有代碼在每個這些場景之間發生變化。我只是停止並再次運行應用程序。我確信我不會在運行時更改與不透明有關的任何內容。我在運行時做的唯一事情是在視圖上設置背景顏色和圖像。

編輯:我有一種感覺,重疊的意見可能會造成麻煩,所以我沒有重疊測試,並得到相同的結果。

編輯2:這似乎是層支持視圖層的zPosition的問題。訂單是亂碼和隨機的。如果我手動強制層的zPosition到正確的值來匹配子視圖順序,那麼一切都很好。不幸的是,我找不到比設置zPosition更簡單的方法。

+0

您是否正在運行OS X Beta?在10.8.3測試版中,我對層和層次支持的東西有一些非常糟糕的體驗。 – CodaFi

+0

不,運行10.8.2 – indragie

回答

2

這似乎是一個OS X的錯誤。 A radar has been filed。同時,這裏我找到了最好的解決方法(其中view是所有的兄弟姐妹意見的上海華):

view.subviews = [view.subviews copy]

觸發的制定者subviews設置在視圖層的正確zPosition