Mac窗口不会让我调整到更小,可能是约束?

时间:2015-03-20 23:43:13

标签: macos cocoa nswindow nslayoutconstraint

我对出现问题的方式并不乐观,但我的猜测是与约束有关。

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

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

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

编辑:

我将[self.window.contentView constraintsAffectingLayoutForOrientation:NSLayoutConstraintOrientationHorizontal]的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

2 个答案:

答案 0 :(得分:4)

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

如果情况不够清楚,您必须在窗口的视图层次结构中显示出约束条件。

答案 1 :(得分:0)

@Ken Thomases建议记录...

[self.window.contentView constraintsAffectingLayoutForOrientation:NSLayoutConstraintOrientationHorizontal]

能够告诉我哪些观点导致了这个问题。我在窗户上连续放了7个文字标签。它们中的大多数应该是等宽度,但每端的那个更大。第一个是其他人的3倍,最后一个是其他人的2倍。

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

一旦我这样做,问题就消失了。不完全确定原因,但也许这种描述会帮助其他人。