0

我刚刚开始尝试NSStackView,我遇到了一个非常有趣的问题,我无法解决。我已经搜索了 Apple 网站上的自动布局指南以及NSStackView文档,但似乎找不到任何东西。

我的问题是我有两个从 nib 文件加载的相同NSScrollView对象(每个都带有嵌入的)。NSTextView当我将这些视图添加到我的堆栈视图时,第一个添加的视图会占用 100% 的可用空间,第二个会完全折叠到底部,高度为 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它知道它应该是什么高度,因此第二个NSScrollView被折叠了。Xcode 中默认创建的约束给出了NSScrollView' 与其他元素的关系,但是这个信息并没有告诉堆栈视图它的高度应该是什么。

解决方案是向NSScrollView(以编程方式或在 Interface Builder 中)添加高度约束,以便NSStackView正确布置视图。然后,这一切都神奇地起作用了。

于 2014-11-25T21:46:24.577 回答