既存のアプリケーションが Mojave でどのように動作するかをテストしていたところ、レイアウトに奇妙な問題が見つかりました。ウィンドウ ツールバーの表示をオフにしてからオンに戻すと、ツールバーがコンテンツを押し下げるのではなく、コンテンツの上に表示されます。
スニペット:
CustomPopUp *popup = [CustomPopUp popup];
__weak CustomRevealViewController *rev = self.revealViewController;
__weak NSWindow *window = self.view.window;
// Called when user taps in the popup view
[popup setCloseAction:^(BOOL success){
[rev removeOverlayController];
// !!! After this layout breaks
[window.toolbar setVisible:YES];
}];
[window.toolbar setVisible:NO];
[self.revealViewController showOverlayController:popup];
問題の原因とそれを修正する方法について何か考えはありますか?
編集1:
ここで簡単なプロジェクトを作成しました。
再現する手順:
- Xcode 10 ベータ版でプロジェクトを実行する (Mac OSX Mojave が必要)
- 「ツールバーを隠す」ボタンを押します。これにより、ツールバーが非表示になり、ボタンのタイトルが更新されます。
- 「ツールバーを表示」を押します
結果:
ツールバーが壊れているように見えます。コントローラー越しです。
期待される結果:
他の OS バージョンと同様に動作するはずです。コントローラーの上部の制約を下に移動する必要があります。
編集2:
macOS 10.14 beta の AppKit リリース ノートのLayer -Backed Viewsセクションで手がかりを見つけたのかもしれません。
祖先、子孫、または交差する兄弟が再描画されるときに再描画されることに暗黙的に依存するビューは、再描画されない場合があります。以前と同様に、ビューを再描画する必要がある場合は、その needsDisplay プロパティを YES に設定します。wantsUpdateLayer から YES を返すビューには、通常、ビューの wantLayer プロパティが NO に設定されている場合でも、排他的なレイヤーが与えられます。macOS 10.14 を対象とするアプリは、wantsLayer プロパティよりも wantsUpdateLayer プロパティを優先する必要があります。
私はまだそれを修正する方法がわかりません。
編集 3: Mojave の公式リリースにより、これはもはや問題ではありません。ありがとうございます。