如何根据自动布局contentView的最小尺寸自动调整NSWindow的大小

时间:2012-08-15 16:10:07

标签: macos cocoa nswindow autolayout

目前我的应用程序的行为允许我调用这个额外的函数,我写道hacks将窗口大小调整为fittingSize。

- (void)fitToMinimumSize
{
    NSRect frame = [self frame];
    frame.size = [[self contentView] fittingSize];
    int originalHeight = [self frame].size.height;
    int diff = originalHeight - frame.size.height;
    frame.origin.y += diff;
    [self setFrame:frame display:YES];
}

但是我可以通过一些内置的自动布局代码自动执行此行为,这样窗口总是最小的contentView而不是这个全能的黑客吗?

编辑:我发现我可以查看[[self contentView] fittingSize],但我怎么能观察到它的变化,或者我应该自己触发它?

1 个答案:

答案 0 :(得分:1)

通常情况下,如果您的布局完全明确地由窗口内容视图中的NSConstraint及其子视图确定,那么一切都应该是“自动的”。

在您的情况下,我尝试在内容视图上安装高度和宽度约束,尺寸足够小(甚至可能为零),但优先级低于子视图上设置的“内容压缩阻力优先级”。要使一切正常运行,您可能必须使用约束优先级和/或在内容视图的子项上安装其他约束。

这应该可以在没有任何其他代码的情况下工作,只要您的子视图被约束为抵抗折叠为零。我还认为在这种情况下,窗口不应该是用户可调整大小的。