NSStackView没有正确布局视图
问题描述:
我刚刚开始尝试使用NSStackView
,我遇到了一个我无法解决的非常有趣的问题。我浏览了Apple网站上的自动版面设计指南以及NSStackView
文档,似乎找不到任何东西。NSStackView没有正确布局视图
我的问题是,我有两个相同的NSScrollView
对象(每个都有一个嵌入的NSTextView
),它们是从nib文件加载的。当我将这些视图添加到我的堆栈视图中时,首先添加的视图占用了可用空间的100%,而第二个视图完全缩小到底部,高度为2像素,同时占用所有可用的水平空间。实际上,这看起来像第一个视图是窗口中唯一的视图。下面是它目前的样子:
这几乎是不可能在这个例子中看到,因为背景颜色,但滚动视图结束窗口的底部上方一对夫妇像素。下面是从视图层次检查,在那里我有选择的这2个像素高清视图更好的视野(click here to view larger):
下面是相关的设置代码:
// 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
,所以任何帮助,将不胜感激。
答
好吧,我找到了解决我自己的问题,我发布它,所以每个人谁搜索这个,并找到问题将有答案。
问题是NSScrollView
没有固有内容大小,禁止了知道它应该是什么高度的NSStackView
,因此第二个NSScrollView
被折叠。在Xcode中默认创建的约束给NSScrollView
与其他元素的关系,但是这个信息并不告诉堆栈视图什么高度应该是什么。
解决方法是将高度约束添加到NSScrollView
(以编程方式或在Interface Builder中),以便NSStackView
可以正确布置视图。然后,这一切都只是神奇的作品。
您是否尝试对子视图使用'NSStackViewGravityTop'? – Astoria 2014-11-22 22:03:44
@Astoria是的,这与我发布的内容没有任何明显不同。 – SevenBits 2014-11-22 22:09:05