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

标签 macos cocoa nswindow autolayout

目前,我的应用程序的行为允许我调用我编写的这个额外函数,该函数可以将窗口大小调整为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 的最小值的大小,而不是这个全能的 hack 吗?

编辑:我发现我可以检查 [[self contentView]fittingSize],但是如果它发生变化,我如何观察它,或者我应该自己触发它?

最佳答案

通常,如果您的布局完全且明确地由窗口内容 View 及其 subview 上设置的 NSConstraint 确定,那么一切都应该已经是“自动”的。

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

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

关于macos - 如何根据自动布局contentView的最小尺寸自动调整NSWindow的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11972944/

相关文章:

macos - 如何在Mac OSX中将焦点标签到下拉字段

Xcode Swift macOS,终端应用程序不执行 NSURLSession

objective-c - 我的 OS X 应用程序如何接受来自 Photos.app 的图片文件的拖放操作?

swift - 使用可信服务器验证 IAP 收据。如果返回的 JSON 不包含 "latest_receipt_info" key ,如何确定试用资格?

macos - 如何在 MacOS 中使用 Cocoa 查找插入符位置的绝对值(以像素为单位)?

objective-c - 单例 NSWindowController 关闭后不会重新打开窗口

c - Haskell:不支持的操作(协议(protocol)族不支持地址族)

cocoa - 禁用表列的可访问性

macos - 从 NSDocument 类访问主窗口

macos - 我怎样才能分割一个nswindow?