2

我使用弹簧和支柱以及几种NSSplitViewDelegate调整大小和约束方法实现了以下功能,它们都可以按需要工作。我现在正试图通过用适当的约束autolayout替换所有setFrame消息和方法来采用相同的场景。NSSplitViewDelegateautolayout

我的主窗口的视图包含一个垂直拆分视图(我称为 OuterSplitter),其中顶部、底部、左侧和右侧的前导和尾随空间约束设置为零,以便 OuterSplitter 到其父视图。

OuterSplitter 的右窗格(除其他外)包含另一个垂直拆分视图(我称之为 InnerSplitter),该视图也将 InnerSplitter 到其superview(即 OuterSplitter 的右窗格)的顶部、底部、左侧和右侧的前导和尾随空间约束设置为零)。

我已经为 OuterSplitter 的左窗格以及 InnerSplitter 的左窗格和右窗格设置了标称最小宽度约束。

调整主窗口大小时,所需的行为是将所有(或大部分)扩展和收缩应用于 InnerSplitter 的左窗格,除非最小宽度约束之一生效。因此,我将 OuterSplitter 左侧窗格的拆分视图保持优先级设置为 260(最高),右侧窗格设置为 250。此外,InnerSplitter 左窗格的保持优先级为 245(最低)和右窗格的 255。

我观看了 WWDC 2012 的第 232 场会议的视频,并认为我走在正确的轨道上。我的autolayout约束大部分都按预期工作,但是我的 springs 和 struts 版本没有发生一种非常奇怪的行为。

如果 InnerSplitter 的拆分栏尽可能靠右(InnerSplitter 右窗格处于其最小尺寸)并且 OuterSplitter 拆分栏没有尽可能靠左,那么如果您尝试将 InnerSplitter 的拆分栏拖得更远向右,然后 OuterSplitter 的拆分栏意外地向左移动,导致 InnerSplitter 的左窗格增大,而 OuterSplitter 的左窗格缩小。我的期望是在这种情况下不应该调整大小。

拉动固定在右侧的 InnerSplitter 的拆分条时,是否可以阻止 OuterSplitter 的拆分条移动?如果是这样,应该添加什么约束?还是某些NSSplitViewDelegate方法仍然需要?谢谢。

顺便说一句,我正在使用 Xcode 4.6.3 并针对 OSX 10.8。

4

2 回答 2

0

我遇到了同样的问题,并通过在每个拆分视图窗格中使用 NSViewControllers 来解决它,这样我就没有直接在拆分视图中嵌入拆分视图。它的代码更多,也更复杂,但它似乎确实有效。

当拆分视图嵌入拆分视图时,我从来没有找到解决方案,所以如果有人有答案,我会很感兴趣。

于 2014-06-27T10:27:15.320 回答
0

要解决此问题,您可以在调用 super 之前在 NSSplitView 中添加显式宽度约束-mouseDown:,然后立即将其删除。


此外,看起来这在 10.11 测试版中已修复!

于 2015-06-11T00:00:53.577 回答