6

次のように設定されたNSScrollViewがあります。

MyNSScrollView.hasHorizontalScroller = YES;
MyNSScrollView.hasVerticalScroller = YES;
MyNSScrollView.autohidesScrollers = YES;
MyNSScrollView.scrollerStyle = NSScrollerStyleOverlay;

OS X に接続されているトラックパッドがなく、デフォルトでNSScrollView、コード内の設定が無視され、スクローラーが常に表示されるように強制されることに気付きました。

設定

システム設定を「スクロール時」に変更するか、非表示にするhasHorizontalScrollerなどの設定しかできませんNO。後でマウスのスクロールを無効にしますが、これは私が望む結果ではありません。

デフォルトでは (マウスまたはトラックパッドに自動的に基づく)、ユーザーがトラックパッドを持っていない場合、コンテンツ サイズがフレーム サイズを超えていない場合でも、常にスクローラーが表示されます。ただし、トラックパッドがある場合は、スクローラーが表示されるかどうかに関係なく、コンテンツの上にあるオーバーレイ スタイルになります。

2つの違いは、「レガシー」スタイルがスクローラービューのスペースを占有することです。計算のために値を中継しているvisiableRect場合、またはコンテンツが制約によって特定のアスペクト比を維持する必要がある場合、それは問題になります。

それらを無効にせずに強制的に非表示にする方法はありますか?

4

2 に答える 2

1

どのような状況でどのような症状が発生するのか、正確には明確ではありません。たとえば、その環境設定ペインの「スクロール バーを表示する:」の通常の設定は何ですか? スクローラーの動作をどうしたいですか? 常に見える?スクロール時にのみ表示しますか?

いずれにせよ、問題は単にあなたが何をしているのかを誤解していることだと思いますautohidesScrollers。これを true に設定すると、ドキュメント ビューがクリップ ビュー (コンテンツ ビュー) の境界を超えない場合にスクローラーが非表示になります。これは、すべてが既に表示されているためにスクロールする場所がない場合です。

そのプロパティは、スクローラーが常に表示されるか、スクロールしているときにのみ表示されるかなどとは関係ありません。これは、プログラムでオーバーライドできないシステム設定です。すべてのスクローラーは、ユーザー セッション内のすべてのアプリで同じように動作します。

于 2016-06-11T04:39:36.280 に答える