macos - Mac 窗口不允许我调整为更小,可能有限制?

标签 macos cocoa nswindow nslayoutconstraint

我不确定出了什么问题,但我的猜测是它与约束有关。

当我尝试调整 NSWindow 的大小时,我可以毫无问题地将其放大。但是,当我尝试缩小窗口时,窗口的大小根本不会改变。窗口中很少有元素具有固定大小的约束。总固定宽度仅为 120 左右,而我的窗口宽度约为 700,因此我没有遇到固定宽度问题。事实上,如果我将窗口拖动到 800 宽,那么它的最小尺寸就会变为 800。

我的猜测是,一旦 View 大小增加,它们就不想压缩回来。但这只是猜测。

知道如何解决这个问题吗?抱歉,我无法提供任何代码,但我没有涉及任何代码。这一切都只是我的 xib 中的限制。

编辑:

我将[self.window.contentViewconstraintAffectingLayoutForOrientation:NSLayoutConstraintOrientationHorizo​​ntal]的NSLog添加到- (void)windowDidResize:(NSNotification *)notification。首先,窗口允许我将其大小调整得更大或更小,这就是输出的样子:

2015-03-20 17:41:40.097 10bii Financial Calculator[19780:561394] windowDidResize Constraints: (
    "<NSAutoresizingMaskLayoutConstraint:0x600000081d10 h=-&- v=-&- H:|-(0)-[NSView:0x618000121400]   (Names: '|':NSThemeFrame:0x100902d90'10bii Financial Calculator' )>",
    "<NSAutoresizingMaskLayoutConstraint:0x600000081d60 h=-&- v=-&- H:[NSView:0x618000121400]-(0)-|   (Names: '|':NSThemeFrame:0x100902d90'10bii Financial Calculator' )>",
    "<NSLayoutConstraint:0x6180000856e0 'NSWindow-current-width' H:[NSThemeFrame:0x100902d90'10bii Financial Calculator'(872@500)] priority:500>"
)

然后,经过几次调整大小后,窗口停止允许我将其变小,这是约束日志的输出:

2015-03-20 17:42:03.506 10bii Financial Calculator[19780:561394] windowDidResize Constraints: (
    "<NSAutoresizingMaskLayoutConstraint:0x600000081d10 h=-&- v=-&- H:|-(0)-[NSView:0x618000121400]   (Names: '|':NSThemeFrame:0x100902d90'10bii Financial Calculator' )>",
    "<NSLayoutConstraint:0x60800008d570 H:|-(0)-[ViewWithBackground:0x608000142c00]   (Names: '|':NSView:0x618000121400 )>",
    "<NSLayoutConstraint:0x60800008d520 H:[ViewWithBackground:0x608000142c00]-(0)-|   (Names: '|':NSView:0x618000121400 )>",
    "<NSLayoutConstraint:0x6080000829e0 H:[NSTextField:0x608000180dd0]-(20)-[NSTextField:0x608000180d00]>",
    "<NSLayoutConstraint:0x608000082940 NSTextField:0x608000180dd0.width == 3*NSTextField:0x608000180d00.width>",
    "<NSLayoutConstraint:0x608000082850 NSTextField:0x608000180dd0.width == 3*NSTextField:0x608000180c30.width>",
    "<NSLayoutConstraint:0x608000082800 NSTextField:0x608000180dd0.width == 3*NSTextField:0x608000180b60.width>",
    "<NSLayoutConstraint:0x6080000827b0 NSTextField:0x608000180dd0.width == 3*NSTextField:0x608000180a90.width>",
    "<NSLayoutConstraint:0x608000082ad0 H:[NSTextField:0x608000180d00]-(20)-[NSTextField:0x608000180c30]>",
    "<NSLayoutConstraint:0x6080000828f0 NSTextField:0x608000180dd0.width == 3*NSTextField:0x6080001809c0.width>",
    "<NSLayoutConstraint:0x608000082b70 H:[NSTextField:0x608000180c30]-(20)-[NSTextField:0x608000180b60]>",
    "<NSLayoutConstraint:0x6080000828a0 NSTextField:0x608000180dd0.width == 2*NSTextField:0x6080001808f0.width
+ 3>",
    "<NSLayoutConstraint:0x608000082c10 H:[NSTextField:0x608000180b60]-(20)-[NSTextField:0x608000180a90]>",
    "<NSLayoutConstraint:0x608000082cb0 H:[NSTextField:0x608000180a90]-(20)-[NSTextField:0x6080001809c0]>",
    "<NSLayoutConstraint:0x608000082d00 H:[NSTextField:0x6080001809c0]-(20)-[NSTextField:0x6080001808f0]>",
    "<NSLayoutConstraint:0x60800008d110 H:|-(20)-[NSTextField:0x608000180dd0]   (Names: '|':ViewWithBackground:0x608000142c00 )>",
    "<NSLayoutConstraint:0x60800008d340 H:[NSTextField:0x6080001808f0]-(20)-|   (Names: '|':ViewWithBackground:0x608000142c00 )>" )

窗口如下所示:

enter image description here

最佳答案

据推测,窗口中的某些 View 具有固有内容大小,并且抗压缩优先级大于或等于 500 (NSLayoutPriorityWindowSizeStayPut)。降低压缩阻力优先级,这将使窗口变得更小。

如果这还不够清楚,您将必须显示窗口 View 层次结构中存在哪些约束。

关于macos - Mac 窗口不允许我调整为更小,可能有限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29177499/

相关文章:

objective-c - 在 Objective-C 中自动点击 iTunes 鼠标

objective-c - 了解NSView/NSWindow鼠标捕获和分发

cocoa - 是否有像 "willShowWindow"这样的 NSWindow 通知/委托(delegate)方法?

macos - Mac 10.9上的gdb失败,并显示32 + 64位“无法以可执行格式:无法识别文件格式”

c# - 在 mac 上用 c# 启动一个外部进程

macos - mac上对应的系统库

cocoa - NSTableView 覆盖

c++ - ptr to c++ source for a simple mac (cocoa) based console to use as a command interpreter

swift - NSTouchBar 集成不调用

打开我的项目时 Xcode 意外退出