目前我的应用程序的行为允许我调用这个额外的函数,我写道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],但我怎么能观察到它的变化,或者我应该自己触发它?
答案 0 :(得分:1)
通常情况下,如果您的布局完全明确地由窗口内容视图中的NSConstraint
及其子视图确定,那么一切都应该是“自动的”。
在您的情况下,我尝试在内容视图上安装高度和宽度约束,尺寸足够小(甚至可能为零),但优先级低于子视图上设置的“内容压缩阻力优先级”。要使一切正常运行,您可能必须使用约束优先级和/或在内容视图的子项上安装其他约束。
这应该可以在没有任何其他代码的情况下工作,只要您的子视图被约束为抵抗折叠为零。我还认为在这种情况下,窗口不应该是用户可调整大小的。