首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Autolayout:当高度动态变化时,NSStackView不会调整父视图的大小

Autolayout:当高度动态变化时,NSStackView不会调整父视图的大小
EN

Stack Overflow用户
提问于 2015-08-27 09:27:19
回答 2查看 2.7K关注 0票数 2

类似问题:如何根据使用Autolayout布局的子视图大小调整父视图的大小

我得到了一个NSStackView,它加载DisclosureViewControllers (NSViewController子类),就像在苹果示例InfoBarStackView中一样。

这些可以扩展和撤回任意高度的视图。我希望包含NSStackView的父视图根据NSStackView的内容调整其高度。在苹果的例子中,这是可行的。

然而,不幸的是,苹果正在调整NSWindow的大小,而我使用的是CCNStatusItem (CCNStatusItem Github),这是一个附加到Apple菜单栏中的状态项的视图。该窗口在加载时调整大小为NSStackView的内容,但在内容更改时不调整大小。

当我展开一个部分时,内容会溢出,并被裁剪到视图的底部边缘。

我经历了所有的限制,并试图准确地复制它,但无法使它发挥作用。在Apple示例中,它们以编程方式添加所有内容,而我在Interface中添加了一个NSStackView。

下面是NSStackView的约束:

我的问题是:我在Interface中有哪些约束(具有什么优先级),以便父视图(窗口)与堆栈视图的内容动态调整大小?我是否需要调用某种视图的方法来使其工作呢?

如果我错过了一些必要的信息,请告诉我。

更新

公认的答案是正确的方法。结果是这样的。我的分叉版本的CCNStatusItem可以在https://github.com/julianvogels/CCNStatusItem.git找到

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-07 02:30:40

问题是CCNStatusItem与自动布局不兼容。它将窗口的内容视图设置为自己的视图类(CCNStatusItemWindowBackgroundView)的实例。您的视图是该视图的子视图。

当它创建和添加视图时,它不会关闭translatesAutoresizingMaskIntoConstraints,也不会使用约束将其相对于其superview定位。从根本上说,这意味着它不能因为约束而被迫调整到不同的尺寸。

同样,当它将视图添加到背景视图时,它不会关闭视图上的translatesAutoresizingMaskIntoConstraints,也不会设置约束将视图与背景视图关联起来。

既然有了源代码,就可以进行这些更改。

票数 1
EN

Stack Overflow用户

发布于 2015-09-07 01:55:55

在使用自动布局约束时,不需要调用视图方法来产生此效果,但只需确保:

  • 堆栈视图中的视图具有将导致它们增长的约束。
  • 容器具有堆栈视图的约束,这些约束指示容器应与堆栈视图一起增长。
  • 容器没有阻止它生长的任何约束。

屏幕截图似乎表明这不是第一次--视图正在按预期增长。所以可能是第二次或者第三次。界面构建器的屏幕截图似乎表明底部的StackView<>Container约束是可选的(它是虚空的)。根据实际的优先级,这可能是你的问题。根据您所描述的设计,不应该有任何理由不需要该约束。

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

https://stackoverflow.com/questions/32245528

复制
相关文章

相似问题

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