2016-05-19 6 views
1

私は、ウェブビューでポップオーバーを伴うOS Xアプリケーションで作業しています。ウェブビューのdrawsBackgroundNOに設定されています。ウェブビューの上に、これらのポップオーバーにボタンがあることがあります。これらのボタンにはカスタム背景色があり、テキストの色はNSAttributedStringで設定します。しかし、「システム環境設定」の「透明度を下げる」設定がオンの場合は、白い文字が消えます。テキストが他の色であれば、それは明らかではありますが(かすかにも)表示されます。OS Xの透明度を下げる設定では、ポップオーバーのNSButtonの白いテキストが消えます

See here問題を示すGitHubのプロジェクト例です。

ここでは何が起こっていますか?

更新:これについてWWDC 2016のエンジニアと話をし、バグであることを確認しました。私はレーダーを提出した。彼は問題のボタンの外観をNSAppearanceNameAquaに設定することで、自分のコードで修正することができました。

+0

ボタンはレイヤーを使用する必要がありますか? – rocky

+0

@rocky私は 'layer.backgroundColor'を使ってボタンのカスタム背景色を実現しています。技術的には、代わりにタイル張りのイメージや何かを使うことができると思います。興味深いもの: –

答えて

1

問題はあなたのウェブビューとは関係ありません。私はスーパービューからWebビューを削除しても問題は解決しません。この問題は、レイヤーの使用に関連しています。 button.wantsLayer = YESをコメントアウトすると、問題はもう発生しませんが、背景色はありません。レイヤーを使用して背景色を設定する場合は、レイヤーを使用せずにこれを行う方法があります。

[(NSButtonCell *)button.cell setBackgroundColor:[NSColor colorWithRed:112.0f/255 green:107.0f/255 blue:151.0f/255 alpha:1]]; 

レイヤーを追加すると、drawRectメソッドを使用してボタンに描画されているものの上にレイヤーが配置されます。私の推測では、「透明度を下げる」オプションがオンになっていると、テキストがある領域のレイヤーの不透明度が増加します。黄色のような他のテキストの色で遊んでいると、実際の色は灰色がかった黄色のように見え、テキストの不透明度が増すという私の疑惑を裏付けています。

+0

この問題は実際にはまだWebビューなしでも発生しますが、Webビューがなければ、ボタンのテキストは設定を切り替えるとすぐに消えません。あなたは、ポップオーバーを閉じて、再度開く必要があります。レイヤーの設定を削除すると、テキストはそのまま残りますが、アプリケーションの残りのレイヤーはレイヤーベースなので、ボタンがレイヤーベースのビューでは、セルの背景色が表示されません。 –

+0

「Web表示なしで、設定を切り替えるとすぐにボタンのテキストが消えない」と言うと、設定を切り替えると消えるはずですか?アプリの実行中に設定を切り替える場合は、おそらくアプリケーションを再起動する必要があります。レイヤーベースのアプリケーションの残りの部分に関しては、あなたのサンプルプロジェクトのみを扱うことができます。したがって、あなたのプロジェクトを更新するか、実際のプロジェクトを反映するコードを投稿してください。 – rocky

+0

私のコンピュータ(El Cap 10.11.5)で実行すると、設定を切り替えることができ、ボタンのテキストがすぐに消えるのを見ることができます。それは望ましい行動ではありません - 私は設定が何であってもテキストをそこにとどめたいです。しかし、それは私が観察した行動です。 –

関連する問題