次のようなビュー階層があります。
つまり、基本的に、スクロールビュー(テーブルビュー用)を含むサブビューと、3つのサブビューを含むフッタービューを備えたNSSplitViewがあります。注意すべきいくつかの重要なこと:
- 10.8ベースSDKを使用し、自動レイアウトはありません
- ウィンドウコンテンツビュー、分割ビュー、スクロールビューとフッタービューの親ビュー、およびスクロールビューとフッタービューはすべて、NSViewContentsRedrawOnSetNeedsDisplay再描画ポリシーでレイヤーバックされます。
- の
NSClipView
は、ビューをホストするレイヤーであり、バッキングレイヤーとしてを使用NSScrollView
する特別なサブクラスです。CAScrollLayer
- カラービューは、背景色が設定されたシンプルなレイヤーバックビューです。
- 背景ビューは、contentsプロパティが画像に設定されたサブレイヤーを持つレイヤーホスティングビューです( contentsCenterも設定されています)
- コンテンツビューは、単一のサブビュー、カスタムレイヤーバックボタンビュー(NSButtonではない)を含むレイヤーバックコンテナビューです。
- フッタービューは、スクロールビューと約3ピクセル重なっています。
このレイアウトではかなり不安定な動作になります。これが私が得ている3つの異なるシナリオであり、アプリを起動するたびにランダム化されます。
1)すべてが正常に表示されます。背景ビューとすべてのコンテンツがあります:
2)ボタンは正常に表示されますが、背景ビューは部分的に透明に見えます。
3)背景ビューは正しく表示されますが、ボタンが消えています。
これらの各シナリオ間で変更されるコードはまったくありません。アプリを停止して再度実行します。実行時に不透明度に関連するものを変更しないようにしました。実行時に行うのは、ビューの背景色と画像を設定することだけです。
編集:重複するビューが問題を引き起こしている可能性があると感じたので、重複せずにテストして同じ結果を得ました。
編集2:これはzPosition
、レイヤーに裏打ちされたビューのレイヤーの問題のようです。順序はスクランブルされ、ランダムです。レイヤーのzPositionを手動で強制してサブビューの順序に一致する正しい値にすると、すべてが正常になります。残念ながら、これを行うためのよりクリーンな方法は、を設定するだけでは見つかりませんzPosition
。