Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa NSStackView将NSView放置在基线上_Cocoa_Nsview_Nsviewcontroller_Nslayoutmanager_Nsstackview - Fatal编程技术网

Cocoa NSStackView将NSView放置在基线上

Cocoa NSStackView将NSView放置在基线上,cocoa,nsview,nsviewcontroller,nslayoutmanager,nsstackview,Cocoa,Nsview,Nsviewcontroller,Nslayoutmanager,Nsstackview,回顾了苹果公司关于NSStackView的大部分(缺乏)文档,再加上大互联网的智慧话语,包括Stackoverflow的集体智慧,问题依然存在 我以编程方式添加到(IB实例化的)NSStackView中的任何NSView,都可以直观地将它们定位到各自重力区域的底部。因此,它们彼此重叠,不像预期的具有适当间距的视图“堆栈” 每个重力区域似乎都被压缩了,无法容纳更多的视图。我越多地将NSStackView.addView应用于重力区域,现有视图就变得越细 我希望NSStackView能够自然地扩展以

回顾了苹果公司关于NSStackView的大部分(缺乏)文档,再加上大互联网的智慧话语,包括Stackoverflow的集体智慧,问题依然存在

我以编程方式添加到(IB实例化的)NSStackView中的任何NSView,都可以直观地将它们定位到各自重力区域的底部。因此,它们彼此重叠,不像预期的具有适当间距的视图“堆栈”

每个重力区域似乎都被压缩了,无法容纳更多的视图。我越多地将NSStackView.addView应用于重力区域,现有视图就变得越细

我希望NSStackView能够自然地扩展以适应嵌入视图的.size

任何明智的建议都是非常感激的

---更多细节-

我使用interface builder将StackView放入主窗口。然后,我可以将其他视图添加到interface builder中的堆栈区域中,例如按钮。这些堆栈和布局与IB中以及运行时的预期一致

但是,当我以编程方式向任何重力区域添加或插入任何视图时,它们的底边将垂直向下定位到StackView的底边。此布局行为与垂直或水平堆栈相同

因此,如果我以编程方式添加多个视图,它们的大小可以调整并显示,但重叠。我使用“NSBox”对象作为视图(目前),它们的大小是使用“.sizeToFit()”确定的。我可以看到它们的“.bounds.height”和“width”都不是零

我不知道如何设置或记录内部内容大小。这可能是下一步要尝试的事情

-不走运-

所以,我现在已经严格地处理了所有排列:压缩、拥抱、(非零)内在大小、约束、无约束和各种类型的NSView,但是。。。如果在任何“NSStackView”重力区域中多次输入“.addView(…)”或“.insertView(…)”,则后续视图将覆盖先前视图,并将其自身定位在特定基线上。这是最靠近我办公室地板的边,与堆栈方向无关


任何“NSStackView”和自动布局帮助,无论是情感上的还是技术上的,都是最受欢迎的。

因此,NSStackView的所有问题似乎都来自于它的限制。必须以正确的形式为子视图提供约束。最简单的方法是在stackview的每个子视图中放置具有实体约束的对象/视图

在Interface Builder中,当我将带有大小、宽度和前导约束的简单NSImageView放置在NSView中,该NSView将成为Stackview的子视图时,堆栈将正确显示

但是,如果我的NSStackView中只有空NSView,即使已设置样式并指定了帧,NSView也不会显示,或者所有视图都将根据基线进行堆叠

此NSView不会显示在NSStackView中:

此NSView将显示在NSStackView中:

告诉我们堆栈视图在视图层次结构和窗口中的位置。另外,您对堆栈视图应用了哪些约束,使其与容器和/或同级视图相关?您将向堆栈视图添加哪些类型的视图?特别是,它们是否具有固有的内容大小?您在这些视图中添加了哪些约束条件(如果有)?
NSBox
没有固有的内容大小。除非在布局上设置显式的宽度和高度约束,或者在其中放置具有内在或显式大小的视图,并将这些视图与其具有约束的容器相关联,否则布局是不明确的,您可以获得任意结果。大小很可能会归零。我认为NSStackView的全部目的是简化并添加适当的约束。难道你不能摆脱宽度和高度的限制,让NSStackView的重力/方向来处理剩下的部分吗?