我有一个NSStackView以编程方式创建,我添加了一个NSButton。NSStackView和固有内容大小的子视图
NSStackView *stackView = [[NSStackView alloc] initWithFrame:rect];
stackView.autoresizingMask = NSViewWidthSizable|NSViewHeightSizable;
stackView.alignment = NSLayoutAttributeBaseline;
(...)
NSButton *button = [[NSButton alloc] initWithFrame:CGRectMake(0, 0, 40, 50)];
button.image = item.image;
button.title = item.name;
button.bordered = NO;
button.imagePosition = NSImageAbove;
button.translatesAutoresizingMaskIntoConstraints = NO;
(...)
[stackView addView:button inGravity:NSStackViewGravityLeading];
我以为这是足够的,因为按钮有一个内在的内容大小(我检查它是返回一个合适的值)。我可以看到按钮框架是origin =(x = 0,y = 0)size =(width = 40,height = 50),它的superview(NSStackViewContainer的一个实例)是origin = (x = 0,y = 0)大小=(宽度= 0,高度= 0)并且NSStackView是原点=(x = 0,y = 0)大小=(宽度= 400,高度= 50)。
正如你可以看到NSStackViewContainer具有0宽度和高度...
如果我添加一个宽度&高度限制的按钮,一切工作正常。为什么按钮的intrinsicContentSize不够?
即使在10.12我结束了一个堆栈视图不会产生约束。在添加子视图(甚至在将视图添加到窗口之前)之后,不是强制整个窗口更新约束,而只是简单地调用'[stackView updateConstraintsForSubtreeIfNeeded]'/'stackView.updateConstraintsForSubtreeIfNeeded()'就足够了。 – DarkDust