首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有内部内容大小的NSStackView和子视图

具有内部内容大小的NSStackView和子视图
EN

Stack Overflow用户
提问于 2014-02-13 12:16:01
回答 1查看 6.3K关注 0票数 3

我有一个以编程方式创建的NSStackView,并在其中添加了一个NSButton。

代码语言:javascript
复制
    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) size=(width=0,height=0),NSStackView是origin=(x=0,y=0) size=(origin=,en19#)。

如您所见,NSStackViewContainer的宽度和高度为0.

如果我在按钮中添加一个宽度和高度约束,一切都可以正常工作。为什么按钮intrinsicContentSize还不够?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-11 16:51:40

[stackView constraints]可能正在返回一个空数组--这是不正确的,并且会导致问题。如果是这样的话,那么当堆栈视图在窗口中时,没有什么会触发更新约束或布局的初始传递。

在窗口中添加您自己的约束就足以触发它,但是如果不是这样的话,NSStackView应该能够触发它本身(这可能值得对其进行雷达检查)。

在不添加不必要的约束的情况下,解决此问题的一种方法是调用:

代码语言:javascript
复制
[window updateConstraintsIfNeeded];

代码语言:javascript
复制
[window layoutIfNeeded];

在将StackView添加到窗口后。

Update:这是在NSStackView中修正的,在约塞米蒂,10.10。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21754004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档