NSSplitView子视窗大小以编程方式约束到容器NSSplitView的大小

问题描述:

很难将这个问题转化为单词,但真实世界的例子将有所帮助。如果您查看iTunes应用程序,则对于源列表和作品面板,它看起来具有Sidebar | Content拆分的NSSplitView和嵌套NSSplitViewNSSplitView子视窗大小以编程方式约束到容器NSSplitView的大小

enter image description here ======>enter image description here

当拖动分频器使侧边栏更薄,图形视图(内NSSplitView的下半部分)缩短,以保持正确的纵横比。这是我以后的行为。

我已经连接外部NSSplitViewdelegate指向sideBarController,所以我可以得到大小的变化,并以编程方式调整拆分视图的下半部分。 我有这个问题的一半工作正常,,即当我改变侧边栏,宽度,侧栏面板相应地调整其大小。

我在攻击中遇到的问题是如何在嵌套的NSSplitView的高度发生变化时调整边栏宽度。我最初试图找到使内部splitview的divider不可拖动的方法,但是找不到任何方法来做到这一点。我现在设置的方式是将内部滚动视图的委托设置为拥有主分割视图的windowController,然后对高度进行计算以更改信息面板的宽度。

当然,改变其大小会导致另一个分割视图改变其大小,从而再次激发原始大小并创建无限循环。我可以添加标志和计时器来尝试解决这个问题,但已经看起来我正在为了实现这个功能而重新开始工作。

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

,你可以尝试考虑看看我的CHLayoutManager,这样可以让你做的事:

[mySplitView setLayoutName:@"splitview"]; 
CHLayoutConstraint *constraint = [CHLayoutConstraint constraintWithAttribute: CHLayoutConstraintAttributeHeight relativeTo:@"splitview" attribute: CHLayoutConstraintAttributeWidth]; 
[mySplitView addConstraint:constraint]; 

现在,每当你mySplitView调整大小,它会自动更新视图以匹配宽度的高度。

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

+0

感谢您的回答。这将容易处理一半的问题,但是当用户调整内部视图时会发生什么情况,我将不得不调整外部视图的大小并获取约束周期,因为我必须在两个视图控制器之间有时髦的逻辑来确保这不会发生。有没有办法解决这个问题?如果我可以禁用内部拆分视图的手动调整大小,那么您的解决方案将会非常令人吃惊 – coneybeare 2011-01-27 03:09:26