【问题标题】:How to hidden the sub NSView according to the window size in Mac OS?如何根据 Mac OS 中的窗口大小隐藏子 NSView?
【发布时间】:2020-04-22 16:08:40
【问题描述】:

我正在用 swift 编写一个 MacOS 应用程序。窗口中的主要布局如下:

NSStackView 有一个侧边栏(NSTableView)和一个 NSView。这里列出了我想要实现的目标:

  1. 改变窗口大小时,侧边栏的宽度是固定的。
  2. 当窗口宽度小于WIDTH_THRESHOLD时,隐藏侧边栏。

问题

  1. 对于 Target 1,sideBar 和 NSView 的约束如下,但不起作用,sideBar 的宽度仍然变化。

  1. 对于目标 2,该项目有一个 NSWindowController 和一个 NSViewController。我可以在NSWindowController 中收听窗口大小,但我不知道如何将此消息传输到NSViewController 以隐藏侧边栏。

注意NSStackView在size inspector中有Hugging PriorityClipping Resistance PriorityVisibility Priorities等属性,我可以通过设置这些属性来达到目标​​吗(如下图)?

【问题讨论】:

  • 我认为 NSSplitView 或 NSSplitViewController 比 NSStackView 更适合侧边栏应用程序。

标签: swift macos cocoa nsviewcontroller nsstackview


【解决方案1】:
  1. 您是否限制了侧边栏的宽度?如果您还没有,可能会发生NSView 正在自动调整大小并推动侧边栏。更改红色箭头不会创建实际的约束,只会更改调整大小的规则。

  2. 听你NSWindowController的窗口大小,就像你说的那样。只要您在该窗口类中引用了可用的侧栏(例如,您可以访问包含它的视图控制器),您可以在窗口变得太小时时设置sideBar.isHidden = true,在窗口太小时设置false又够大了。

【讨论】:

    【解决方案2】:
    1. 最后,我使用 NSSplitView 作为侧边栏,它更容易。

    2. 我用NSSplitViewDelegate来监听SplitView的宽度变化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 2022-07-09
      • 2011-12-09
      • 2015-07-27
      • 2011-07-26
      • 2018-05-29
      • 1970-01-01
      相关资源
      最近更新 更多