【问题标题】:How to auto-resize NSWindow based on auto layout contentView's minimum size如何根据自动布局 contentView 的最小尺寸自动调整 NSWindow
【发布时间】:2012-08-15 16:10:07
【问题描述】:

目前,我的应用程序的行为允许我调用我编写的这个额外函数,该函数可以将窗口大小调整为 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],但是我如何观察它以防它发生变化,或者我应该自己触发它?

【问题讨论】:

  • 请注意,使用Autolayout 约束与使用自动调整掩码不同。

标签: macos cocoa nswindow autolayout


【解决方案1】:

通常,如果您的布局完全由 NSConstraint 在窗口内容视图及其子项上的设置确定,那么一切都应该是“自动的”。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-17
    • 2015-03-12
    • 2019-03-12
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    相关资源
    最近更新 更多