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

时间:2011-01-27 02:44:59

标签: cocoa nsview resize nssplitview

很难将这个问题用语言表达,但现实世界的例子会有所帮助。如果您查看iTunes应用程序,NSSplitView拆分似乎有Sidebar | Content,源清单和图稿面板的嵌套NSSplitView

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

当您拖动分隔线以使侧边栏变薄时,图稿视图(内部NSSplitView的下半部分)会缩短以保持正确的宽高比。这就是我追求的行为。

我已连接外部NSSplitView的{​​{1}}以指向sideBarController,因此我可以获取大小调整更改并以编程方式调整拆分视图的下半部分。 我有一半的问题正常工作,也就是说,当我更改侧边栏宽度时,侧边栏面板会相应地调整它们的大小。

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

当然,改变其大小会导致另一个splitview改变其大小,这会再次影响原始大小并创建无限循环。我可以添加标记和计时器来尝试解决这个问题,但看起来我已经再次尝试实现这一功能了。

如何正确地将嵌套的splitview面板约束到其父级宽度,或者更一般地说,复制iTunes“所选项目/正在播放”视图的大小调整行为的最佳方法是什么? < / p>

1 个答案:

答案 0 :(得分:3)

您可以尝试查看我的CHLayoutManager,这样您就可以:

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

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

你可能不得不为你的情况做一些复杂的事情,但这是一般的想法。