我有一个以编程方式创建的 NSStackView,我向其中添加了一个 NSButton。
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),它的超级视图(NSStackViewContainer 的一个实例)是 origin=(x=0 , y=0) size=(width=0, height=0) 并且 NSStackView 是 origin=(x=0, y=0) size=(width=400, height=50)。
如您所见, NSStackViewContainer 的宽度和高度为 0...
如果我向按钮添加宽度和高度约束,一切正常。为什么按钮 intrinsicContentSize 不够?