0

の実験を始めたばかりでNSStackView、解決できない非常に興味深い問題があります。Apple の Web サイトの自動レイアウト ガイドとドキュメントを精査しましたが、NSStackView何も見つからないようです。

私の問題は、nib ファイルからロードされる2 つの同一NSScrollViewのオブジェクト (それぞれに が埋め込まれている) があることです。NSTextViewこれらのビューをスタック ビューに追加すると、最初に追加されたビューが使用可能なスペースの 100% を占有し、2 番目のビューは使用可能な水平スペースをすべて占有しながら、高さ 2 ピクセルで下部まで完全に折りたたまれます。実際、これは最初のビューだけがウィンドウ内にあるように見えます。現在の外観は次のとおりです。

問題のあるウィンドウのスクリーンショット

この例では、背景色のためにほとんど見ることができませんが、スクロール ビューはウィンドウの下部から数ピクセル上で終了します。これは、ビュー階層インスペクターからのより良いビューです。ここでは、この 2 ピクセルの高さのビューを選択しています (拡大するにはここをクリックしてください)。

Xcode ビュー階層インスペクター

関連するセットアップコードは次のとおりです。

// Load the stack view
self.inputViewController = [[NSViewController alloc] initWithNibName:@"Document_TextInputView" bundle:nil];
self.textView = (NSTextView *)[[(NSScrollView *)self.inputViewController.view contentView] documentView];

self.outputViewController = [[NSViewController alloc] initWithNibName:@"Document_TextOutputView" bundle:nil];
self.outputView = (NSTextView *)[[(NSScrollView *)self.outputViewController.view contentView] documentView];

// Add all views into the stack view
[self.stackView addView:self.inputViewController.view inGravity:NSStackViewGravityTop];
[self.stackView addView:self.outputViewController.view inGravity:NSStackViewGravityBottom];
self.stackView.orientation = NSUserInterfaceLayoutOrientationVertical;

// Load the text into the window.
[self.textView setString:self.cachedText];
[self.outputView setString:@"=== PROGRAM OUTPUT ===\n"];
[self.codeActionSegmentedControl setEnabled:NO forSegment:1];

私が理解していることから、固有のコンテンツ サイズにより、ビューがこれほど小さく縮小されることはありません。私はあまり詳しくないNSStackViewので、助けていただければ幸いです。

4

1 に答える 1

3

わかりました、私は自分の問題の解決策を見つけました。これを投稿して、これを検索して質問を見つけたすべての人が答えを得ることができるようにします。

問題はNSScrollView、固有のコンテンツ サイズがないため、NSStackViewどの高さであるべきかを知ることができないため、2 番目のコンテンツNSScrollViewが折りたたまれていたことです。Xcode でデフォルトで作成された制約は、NSScrollViewと他の要素との関係を示しますが、この情報は、その高さがどうあるべきかについてスタック ビューに何も伝えません。

NSScrollView解決策は、 (プログラムまたは Interface Builder で) に高さの制約を追加しNSStackViewて、ビューを適切にレイアウトできるようにすることです。その後、すべてが魔法のように機能します。

于 2014-11-25T21:46:24.577 に答える