Mac Window 不会让我调整到更小的尺寸,可能是限制条件?

Mac Window Won't Let Me Resize to Smaller, possibly constraints?

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

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

我的猜测是,一旦视图的大小增加,它们就不想再压缩了。但这只是猜测。

知道如何解决这个问题吗?对不起,我不能提供任何代码,但我没有涉及任何代码。这只是我的 xib 中的限制。

编辑:

我添加了一个 [self.window.contentView constraintsAffectingLayoutForOrientation:NSLayoutConstraintOrientationHorizontal] 的 NSLog 到 - (void)windowDidResize:(NSNotification *)notification。起初 window 让我调整它的大小,这就是输出的样子:

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>"
)

然后,经过几次调整后,window 不再允许我将其变小,这是约束日志的输出:

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 )>" )

这是 window 的样子:

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

如果这还不够清楚,您将不得不展示在您的 window 视图层次结构中存在哪些限制。

@Ken Thomases 的日志记录建议...

[self.window.contentView constraintsAffectingLayoutForOrientation:NSLayoutConstraintOrientationHorizontal]

能够为我提供有关导致问题的视图的线索。我在 window 中连续有 7 个文本标签。它们中的大多数应该是等宽的,但两端的宽度更大。第一个是其他人的 3 倍,最后一个是其他人的 2 倍。

当我最初设置约束时,我选择了所有约束并应用了等宽约束,然后我修改了乘数。我注意到 3x 标签是所有其他标签都是 EqualWidth'd 的视图。我担心最后的安排过于复杂。所以我删除了这些约束,并一次一个地重新应用它们,并确保所有相同大小的标签都相互键控,然后 3x 键控到 1x 标签之一。

一旦我这样做了,问题就消失了。不确定为什么,但也许这个描述会对其他人有所帮助。