2

ボトムビューに NSScrollView を持つ NSSplitView があります。問題は、下部ビューを折りたたんでから再度開く (折りたたみを解除する) と、スクロール ビューの高さがその下部ビューの高さを超えているため、スクロール ビューの上部が切り取られていることです。IB でスクロール ビューと分割ビューを全方向に自動サイズ変更するように設定しました。折りたたみを解除した後にそのスクロール ビューの高さを調整する必要がありますか、それともサイズ変更プロパティを間違って設定していますか? 以下は、クリッピングがどのように見えるかの前後の画像です。

崩壊前:

代替テキスト

折りたたんで再度開いた後 (下部のビューのスクロール バーが切り取られていることに注意してください)

代替テキスト

4

4 に答える 4

4

この問題は、ココアの自動サイズ変更ルールがデルタを前の状態から現在の状態にスケーリングすることによって機能するという事実から生じます。マージンのいずれかが 0 になると、スケーリングの乗算の性質により、ビューが大きくなっても元に戻ることはありません。

これを回避するための一般的な方法は、NSSplitView デリゲート メソッドを使用して分割ビューが小さくなるのを防ぎ、スナップで閉じることです。これにより、折りたたまれたビューが内部的に最小サイズに保たれます。

分割ビューのドキュメントへのリンクは次のとおりです。

また、ユーザー エクスペリエンスについて考えると、ビューのサイズを特定のポイントよりも小さくすると、おそらくビューの見栄えが非常に悪くなります。このスナップと折りたたみの動作を追加すると、両方の問題に対処できます。

この例をご覧になりたい場合は、Mac OS X の Mail.app が特定の高さに達すると、インライン メッセージ ビューを閉じます。その振る舞いを真似する必要があります。

于 2009-08-08T18:15:38.587 に答える
0

Jon Hess は問題をうまく説明できますが (サブビューの幅が 0 になるとすぐに、自動幅要素の自動サイズ変更情報が失われます)、解決策はすべての場合に実際に与えられるわけではありません。サブビューを折りたたむことができるため、私の場合、幅を制限しても役に立ちませんでした。

サブビューをゼロに縮小するのではなく非表示に設定して最小幅を維持するために、splitView デリゲート メソッド -splitviewWillResizeSubviews: を実装することで、許容可能な解決策を達成することができました。

- (void)splitViewWillResizeSubviews:(NSNotification *)notification {
        NSUInteger divider = [[[notification userInfo] valueForKey:@"NSSplitViewDividerIndex"] intValue];
        NSView *subview = nil;
        if(divider == SPLITVIEW_DIVIDER_SIDEBAR) {
            subview = (NSView*)[self.splitView.subviews objectAtIndex:SPLITVIEW_SIDEBAR_INDEX];
        }
        if(subview) {
            if(subview.frame.size.width < SPLITVIEW_MINIMUM_SIDEBAR_WIDTH) {
                CGRect correctedFrame = subview.frame;
                correctedFrame.size.width = SPLITVIEW_MINIMUM_SIDEBAR_WIDTH;
                subview.frame = correctedFrame;
                subview.hidden = YES;
            } else {
                subview.hidden = NO;
            }
        }
    }
于 2012-07-17T12:50:22.963 に答える
0

私も同じ問題を抱えてる。BWToolkit の分割ビューを使用して修正しました。これにより、各ビューの最大高と最小高を決定できます。

于 2010-01-28T18:58:50.183 に答える
0

おそらく、NSUserDefaults を介して物事を「リセット」できます。 などのキーがありNSSplitView Subview Frames、座標を割り当てることができます。0.000000, 0.000000, 0.000000, 720.000000, NO

于 2011-09-15T01:01:32.843 に答える