NSSplitView:在窗口调整大小期间控制分隔符位置

arn*_*lja 13 cocoa nssplitview

我有一个NSSplitView,它有两个窗格 - 左边是侧边栏表视图,右边是一个Web视图.我还有一个委托集,它处理侧边栏的约束,如下所示:

- (CGFloat)splitView:(NSSplitView *)splitView constrainMaxCoordinate:(CGFloat)proposedMax ofSubviewAt:(NSInteger)dividerIndex {
    return 500.0f;
}

- (CGFloat)splitView:(NSSplitView *)splitView constrainMinCoordinate:(CGFloat)proposedMinimumPosition ofSubviewAt:(NSInteger)dividerIndex {
    return 175.0f;
}

- (BOOL)splitView:(NSSplitView *)splitView canCollapseSubview:(NSView *)subview {
    return NO;
}
Run Code Online (Sandbox Code Playgroud)

这意味着侧边栏只能在175到500像素之间调整大小,这在使用分隔符句柄时工作正常.但是当调整整个窗口的大小时,分隔符会从这些约束中重新定位.

有谁知道如何控制这个?

另外:如果我想存储用户选择的侧边栏宽度,是否可以将其读出来,将其保存到首选项文件并稍后恢复,或者是否有更直接的方法来执行此操作?我注意到窗口的状态在某些情况下得到了保存 - 这通常会发生还是我必须控制它?

提前致谢

阿恩

小智 6

我最初实现了NSSplitView委托函数,最后编写了大量代码来尝试做一些简单的事情,例如限制每个拆分视图边的最小大小。

然后我改变了我的方法并找到了一个干净且极其简单的解决方案。我简单地设置为一个宽度的自动布局常数(> =我所需的最小尺寸)的NSView对的一侧NSSplitView。我在另一边也做了同样的事情。有了这两个简单的约束NSSplitView,无需委托调用就可以完美地工作。


Mik*_*e A 4

您正在寻找的是:

- (void)splitView:(NSSplitView*)sender resizeSubviewsWithOldSize:(NSSize)oldSize
Run Code Online (Sandbox Code Playgroud)

[sender frame]NSSplitView将是调整大小后的新尺寸。然后只需相应地重新调整您的子视图即可。