【问题标题】:Using Cocoa autolayout to hide and show a view使用 Cocoa 自动布局隐藏和显示视图
【发布时间】:2013-11-21 16:30:24
【问题描述】:

我正在尝试根据是否使用自动布局单击按钮来隐藏和显示下图中的视图 #1。有人知道怎么做吗?

我尝试为视图 #2 设置两个 NSLayoutConstraints,一个绑定到视图 #1 和视图 #2 的父视图的顶部,一个绑定到视图 #1 的底部,然后更改NSLayoutConstraints 的优先级隐藏视图 #1,但这似乎没有做任何事情。

任何建议将不胜感激。我主要是在 IB 中尝试这样做,但也欢迎编程解决方案。

图片供参考:

【问题讨论】:

  • 您是想让视图#1 掩盖视图#2 的内容还是只使用NSSplitView
  • 我希望视图 #1 完全隐藏,视图 #2 放大以占用该空间。
  • 那没有回答问题。你能用NSSplitView吗?出于您的目的?
  • 很抱歉给您带来了困惑。我不希望视图#1 掩盖视图#2,并假设我可以使用 NSSplitView 做到这一点。不过,我仍然好奇是否有办法通过自动布局来做到这一点。调查 NSStackView (虽然它没有很好的记录)。谢谢!
  • 如果你想让视图#1 隐藏视图#2 那么你不能使用NSSplitViewNSSplitView 将使用自动布局。 'NSStackView` 仅限于 10.9 仅供参考。

标签: macos cocoa autolayout nsstackview


【解决方案1】:

NSStackView 在这里是合适的。它自动创建约束,将其子视图在堆栈中相互关联。

隐藏视图不会改变布局。它还在,只是没有画出来。

如果你在没有 NSStackView 的情况下这样做,你要做的就是改变约束。保留一个实例变量_stackConstraints。在一种配置中,堆栈约束将是

V:|-[0]-[view1(v1Height)]-0-[view2]-0-[view3(v3Height)]-0-|

在其他配置中

V:|-[0]-[view2]-0-[view3(v3Height)]-0-| 

当你按下按钮时,做

[[self view] removeConstraints:_stackConstraints];
_stackConstraints = <make other set of constraints>
[[self view] addConstraints:_stackConstraints];

【讨论】:

    【解决方案2】:

    如果您愿意要求 10.11+,您可以在 Interface Builder 的 NSStackView 上选择“Detaches Hidden Views”(或以编程方式在其上设置 detachesHiddenViews = YES)。

    然后将 View #1 设置为 hidden = YES 将自动重新布局堆栈视图,使 View #2 占用更多空间(假设堆栈视图高度是固定的 - 如果不是,堆栈视图将变得不那么高)。


    如果你需要支持 10.10 或更早的版本,那么你可以这样隐藏视图:

    [stackView setVisibilityPriority:NSStackViewVisibilityPriorityNotVisible forView:view1];
    

    并通过以下方式再次显示:

    [stackView setVisibilityPriority:NSStackViewVisibilityPriorityMustHold forView:view1];
    

    【讨论】:

      【解决方案3】:
      猜你喜欢
      • 2013-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-18
      • 1970-01-01
      • 2011-12-16
      • 2014-04-04
      相关资源
      最近更新 更多