Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSLayoutConstraint阻止NSWindow调整大小_Objective C_Macos_Cocoa_Nswindow_Nslayoutconstraint - Fatal编程技术网

Objective c NSLayoutConstraint阻止NSWindow调整大小

Objective c NSLayoutConstraint阻止NSWindow调整大小,objective-c,macos,cocoa,nswindow,nslayoutconstraint,Objective C,Macos,Cocoa,Nswindow,Nslayoutconstraint,我正在向NSView添加一些简单的约束,这些约束位于我的主NSView窗口中,但它会导致问题 通常我可以调整应用程序窗口的大小(就像任何Safari/Finder窗口一样)。我在窗口中添加了一个简单的NSView,如下所示: [self.blackDimOverlay setFrame:NSMakeRect(0, 0, self.window.frame.size.width, self.window.frame.size.height)]; [self.blackDimOver

我正在向NSView添加一些简单的约束,这些约束位于我的主NSView窗口中,但它会导致问题

通常我可以调整应用程序窗口的大小(就像任何Safari/Finder窗口一样)。我在窗口中添加了一个简单的NSView,如下所示:

[self.blackDimOverlay setFrame:NSMakeRect(0, 0, self.window.frame.size.width, self.window.frame.size.height)];
        [self.blackDimOverlay setAlphaValue:0.5f];
        [self.window.contentView addSubview:self.blackDimOverlay];
这正如预期的那样有效。然后,我向该视图添加两个约束,使其在调整大小时保持窗口的完整大小

NSDictionary *viewsDict = NSDictionaryOfVariableBindings(_blackDimOverlay);
        NSArray *constraintHorizontalOverlay = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[_blackDimOverlay]-0-|" options:0 metrics:nil views:viewsDict];
        NSArray *constraintVerticalOverlay = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[_blackDimOverlay]-0-|" options:0 metrics:nil views:viewsDict];
        [self.window.contentView addConstraints:constraintHorizontalOverlay];
        [self.window.contentView addConstraints:constraintVerticalOverlay];
但是,在添加这两个约束后,它们会将我的窗口锁定,因此我无法再调整它的大小。其他一切正常,但约束阻止任何窗口大小调整

如何在调整窗口大小的同时保持子视图的完整大小


谢谢。

\u blackDimOverlay
上还有其他限制,这些限制规定了其大小,并且比
NSLayoutPriorityDragThatCanResizeWindow
具有更高的优先级。您可以使用以下方法进行调查:

NSLog(@"%@", [self.window.contentView constraintsAffectingLayoutForOrientation:NSLayoutConstraintOrientationHorizontal]);
NSLog(@"%@", [self.window.contentView constraintsAffectingLayoutForOrientation:NSLayoutConstraintOrientationVertical]);
很可能是您忘记执行
[\u blackDimOverlay settranslates自动调整大小GMaskintoConstraints:NO]

或者,
\u blackDimOverlay
是其实例的视图类定义了一个内在大小,其拥抱和压缩阻力优先级高于
NSLayoutPriorityDragThatCanResizeWindow
。您需要使用
-setContentHuggingPriority:forOrientation:
-setcontentcompressionresistance:forOrientation:
降低这些优先级