3

質問: ヘッダー ビューがあると、自動レイアウトによってスクロール ビューのサイズが変更されないのはなぜですか?

カスタムビューをスクロールビューに埋め込もうとしていますが、スクロールビューは分割ビューに囲まれています。Xcode 4.5 DP 4 で Interface Builder を使用して次のビュー階層を作成しましたが、Xcode 4.4 でも同じ問題が発生するようです。

NSWindow
  NSView (content view of the window)
    NSSplitView
      NSView (split view panel)
      NSView (split view panel)
        NSScrollView
          TestView (my custom view)

ここで、TestView が NSTableHeaderView (-headerView 経由) プロパティを提供する場合、分割ビューの仕切りを下 (または右) までドラッグして TestView を非表示にすることはできませんが、TestView の初期幅または高さの境界まで停止します。-headerView プロパティが nil を返す場合、仕切りは自由にドラッグできます。

これは、新しい Cocoa アプリケーション プロジェクトを作成し、ビューを追加してプロジェクトを実行するだけで、いつでも再現できます。手順:

  1. 新しい Cocoa アプリケーション プロジェクトを作成する
  2. NSTableHeaderView インスタンスを返す headerView プロパティを持つ TestView クラスを作成します。
  3. MainMenu.xib を編集して分割ビューを追加する
  4. カスタム ビューを追加して TestView にします
  5. エディタ -> 埋め込み -> スクロール ビューを選択します。
  6. プロジェクトを実行する

(制約やその他の Interface Builder メニューには触れていません)

TestView.m:

@implementation TestView {
    NSTableHeaderView *_header;
}

- (NSTableHeaderView *)headerView
{
    if (!_header) {
        _header = [[NSTableHeaderView alloc]
                   initWithFrame:NSMakeRect(0.0, 0.0, 100.0, 17.0)];
    }

    return _header;
}

@end

ポインタがあれば、分割ビューの仕切りを再び動かすにはどうすればよいですか?

4

2 に答える 2

1

この NSSplitViewProtocol メソッドを便利なクラスに実装します。

- (BOOL)splitView:(NSSplitView *)splitView shouldAdjustSizeOfSubview:(NSView *)subview {return TRUE;}

分割ビューのデリゲート出力をクラス オブジェクトに接続してください。

分割ビューを任意のサイズに調整できるようになりました。

于 2012-10-14T07:27:27.143 に答える
1

私の解決策は、テーブル ヘッダーの自動サイズ変更の制約を手動で削除することでした。

NSTableHeaderView *headerView = outlineView.headerView;
NSView *headerViewSuperview = headerView.superview;
[headerViewSuperview removeFromSuperview];
headerView.superview.translatesAutoresizingMaskIntoConstraints = NO;
[scrollView addSubview:headerViewSuperview];
于 2013-01-15T07:53:26.577 に答える