14

左側のサイドバー テーブル ビューと右側の Web ビューの 2 つのペインを持つ NSSplitView があります。次のようなサイドバーの制約を処理するデリゲート セットもあります。

- (CGFloat)splitView:(NSSplitView *)splitView constrainMaxCoordinate:(CGFloat)proposedMax ofSubviewAt:(NSInteger)dividerIndex {
    return 500.0f;
}

- (CGFloat)splitView:(NSSplitView *)splitView constrainMinCoordinate:(CGFloat)proposedMinimumPosition ofSubviewAt:(NSInteger)dividerIndex {
    return 175.0f;
}

- (BOOL)splitView:(NSSplitView *)splitView canCollapseSubview:(NSView *)subview {
    return NO;
}

これは、サイドバーのサイズを 175 から 500 ピクセルの間でのみ変更できることを意味し、分割ハンドルを使用すると問題なく機能します。ただし、ウィンドウ全体のサイズを変更すると、これらの制約から仕切りが再配置されます。

これを制御する方法を知っている人はいますか?

さらに、ユーザーが選択したサイドバーの幅を保存したい場合、それを読み込んで設定ファイルに保存し、後で復元するのは良い考えですか、それとももっと簡単にこれを行う方法はありますか? 場合によっては、ウィンドウの状態が保存されることに気付きました。これは一般的に起こっていることですか、それとも制御する必要がありますか?

前もって感謝します

アルネ

4

9 に答える 9

4

あなたが探しているものは次のとおりです。

- (void)splitView:(NSSplitView*)sender resizeSubviewsWithOldSize:(NSSize)oldSize

[sender frame]サイズ変更後の新しいサイズになりますNSSplitView。次に、それに応じてサブビューを再調整します。

于 2012-03-03T22:36:03.570 に答える
1

これが私の実装です-splitView:resizeSubviewsWithOldSize:

-(void)splitView:(NSSplitView *)splitView resizeSubviewsWithOldSize:(NSSize)oldSize {
    if (![splitView isSubviewCollapsed:self.rightView] &&
        self.rightView.frame.size.width < 275.0f + DBL_EPSILON) {
        NSSize splitViewFrameSize = splitView.frame.size;
        CGFloat leftViewWidth = splitViewFrameSize.width - 275.0f - splitView.dividerThickness;
        self.leftView.frameSize = NSMakeSize(leftViewWidth,
                                             splitViewFrameSize.height);
        self.rightView.frame = NSMakeRect(leftViewWidth + splitView.dividerThickness,
                                          0.0f,
                                          275.0,
                                          splitViewFrameSize.height);
    } else
        [splitView adjustSubviews];
}

私の場合、rightView最小幅 275.0 で折りたたみ可能な 2 つのサブビューの 2 番目です。leftView最小値または最大値がなく、折りたたむこともできません。

于 2012-11-08T15:59:57.660 に答える
0

使った

- (void)splitView:(NSSplitView*)sender resizeSubviewsWithOldSize:(NSSize)oldSize

しかし、サブビューフレームを変更する代わりに、私は使用しました

    [sender setPosition:360 ofDividerAtIndex:0]; //or whatever your index and position should be

フレームを変更しても、一貫した結果が得られませんでした。仕切りの位置を設定しました。

于 2014-05-22T15:06:15.987 に答える
0

holdingPriorityInterface Builder で固定側のオンNSSplitViewItemを Required(1000) に設定することで、この動作を実現しました。次に、基になる に制約を設定することで、固定側の幅を制御できますNSView

于 2016-08-26T12:38:32.770 に答える