8

次のようなビュー階層があります。

ここに画像の説明を入力してください

つまり、基本的に、スクロールビュー(テーブルビュー用)を含むサブビューと、3つのサブビューを含むフッタービューを備えたNSSplitViewがあります。注意すべきいくつかの重要なこと:

  • 10.8ベースSDKを使用し、自動レイアウトはありません
  • ウィンドウコンテンツビュー、分割ビュー、スクロールビューとフッタービューの親ビュー、およびスクロールビューとフッタービューはすべて、NSViewContentsRedrawOnSetNeedsDisplay再描画ポリシーでレイヤーバックされます。
  • NSClipViewは、ビューをホストするレイヤーであり、バッキングレイヤーとしてを使用NSScrollViewする特別なサブクラスです。CAScrollLayer
  • カラービューは、背景色が設定されたシンプルなレイヤーバックビューです。
  • 背景ビューは、contentsプロパティが画像に設定されたサブレイヤーを持つレイヤーホスティングビューです( contentsCenterも設定されています)
  • コンテンツビューは、単一のサブビュー、カスタムレイヤーバックボタンビュー(NSButtonではない)を含むレイヤーバックコンテナビューです。
  • フッタービューは、スクロールビューと約3ピクセル重なっています。

このレイアウトではかなり不安定な動作になります。これが私が得ている3つの異なるシナリオであり、アプリを起動するたびにランダム化されます。

1)すべてが正常に表示されます。背景ビューとすべてのコンテンツがあります:

ここに画像の説明を入力してください

2)ボタンは正常に表示されますが、背景ビューは部分的に透明に見えます。

ここに画像の説明を入力してください

3)背景ビューは正しく表示されますが、ボタンが消えています。

ここに画像の説明を入力してください

これらの各シナリオ間で変更されるコードはまったくありません。アプリを停止して再度実行します。実行時に不透明度に関連するものを変更しないようにしました。実行時に行うのは、ビューの背景色と画像を設定することだけです。

編集:重複するビューが問題を引き起こしている可能性があると感じたので、重複せずにテストして同じ結果を得ました。

編集2:これはzPosition、レイヤーに裏打ちされたビューのレイヤーの問題のようです。順序はスクランブルされ、ランダムです。レイヤーのzPositionを手動で強制してサブビューの順序に一致する正しい値にすると、すべてが正常になります。残念ながら、これを行うためのよりクリーンな方法は、を設定するだけでは見つかりませんzPosition

4

1 に答える 1

2

これはOSXのバグのようです。レーダーが提出されました。それまでの間、私が見つけた最善の回避策は次のとおりです(viewすべての兄弟ビューのスーパービューはどこにありますか)。

view.subviews = [view.subviews copy]

のセッターをトリガーすると、ビューレイヤーsubviewsに適切なセットが設定されます。zPosition

于 2013-03-30T20:36:59.443 に答える