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 NSSplitView子视图大小以编程方式限制为容器NSSplitView';s码_Cocoa_Nsview_Resize_Nssplitview - Fatal编程技术网

Cocoa NSSplitView子视图大小以编程方式限制为容器NSSplitView';s码

Cocoa NSSplitView子视图大小以编程方式限制为容器NSSplitView';s码,cocoa,nsview,resize,nssplitview,Cocoa,Nsview,Resize,Nssplitview,这个问题很难用语言表达,但一个真实的例子会有所帮助。如果您查看iTunes应用程序,它似乎有一个NSSplitView用于Sidebar | Contentsplit,还有一个嵌套的NSSplitView用于源代码列表和艺术品面板 =======> 拖动分隔符以使侧栏变薄时,artwork视图(内部NSSplitView的下半部分)会缩短以保持正确的纵横比。这就是我所追求的行为 我已经连接了外部NSSplitView的委托,以指向侧栏控制器,这样我就可以获得大小更改,并以编程方式调整拆分视图下部

这个问题很难用语言表达,但一个真实的例子会有所帮助。如果您查看iTunes应用程序,它似乎有一个
NSSplitView
用于
Sidebar | Content
split,还有一个嵌套的
NSSplitView
用于源代码列表和艺术品面板

=======>

拖动分隔符以使侧栏变薄时,artwork视图(内部
NSSplitView
的下半部分)会缩短以保持正确的纵横比。这就是我所追求的行为

我已经连接了外部
NSSplitView
委托
,以指向侧栏控制器,这样我就可以获得大小更改,并以编程方式调整拆分视图下部的大小我的这一半问题工作正常,也就是说,当我更改侧栏的宽度时,侧栏面板会相应地调整其大小

我在攻击中遇到的问题是,当嵌套的
NSSplitView
的高度改变时,如何调整边栏宽度。我最初试图找到使这个内部splitview的分隔符不可拖动的方法,但找不到任何方法。我现在设置它的方法是将内部scrollview的委托设置为拥有主splitview的windowController,然后计算高度以改变信息面板的宽度

当然,改变一个视图的大小会导致另一个splitview改变其大小,从而再次改变原始大小,并创建一个无休止的循环。我可以添加标志和计时器来尝试解决这个问题,但似乎我已经在这里添加了颗粒来实现这个功能


如何正确地将嵌套的splitview面板约束到其父级宽度,或者更一般地说,复制iTunes“Selected Item/Now Playing”视图的大小调整行为的最佳方法是什么?

您可以查看我的,这将允许您执行以下操作:

[mySplitView setLayoutName:@"splitview"];
CHLayoutConstraint *constraint = [CHLayoutConstraint constraintWithAttribute: CHLayoutConstraintAttributeHeight relativeTo:@"splitview" attribute: CHLayoutConstraintAttributeWidth];
[mySplitView addConstraint:constraint];
现在,无论何时调整
mySplitView
的大小,它都会自动更新视图的高度以匹配宽度


您可能需要针对您的情况做一些更复杂的事情,但这是一般的想法。

谢谢您的回答。这将很容易解决一半的问题,但当用户调整内部视图的大小时,我将不得不调整外部视图的大小并获得约束循环,在这两个视图控制器之间必须有时髦的逻辑,以确保不会发生这种情况。有没有办法避免这种行为?如果我可以禁用内部拆分视图的手动调整大小,那么您的解决方案将起作用amazingly@coneybeare这是可能的;这取决于视图的嵌套方式等等。但是,CHLayoutManager不执行约束循环。每个视图在每次更改通知中都会处理一次,并且约束会按照添加的顺序进行处理。Dave,你的CHLayoutManager工作得很好。我最终完全删除了我的侧栏splitview,并使用了两个NSView。底部的一个是使用CHLayoutManager管理的,我现在只是想弄清楚如何随着artwork面板的增长使源列表的高度缩小。@coneybeare CHLayoutManager也有办法处理这个问题,但它需要更多的自定义代码。给我发一封电子邮件,我会帮你解决。NSLayoutConstraint是怎么回事,它不能处理吗?