我通过子类化创建了一个自定义段控件(Cocoa / macOS)NSView
(不使用任何现有的控件/按钮;它是一个具有一组复杂内部约束的完全自定义视图),具有两种模式:
- 默认水平显示所有段:[segment 1] [segment 2] [segment 3]
- 当所有段都无法适应窗口/当前约束集(受周围控件及其约束的影响)时,将单个段显示为下拉列表:[段 1]
这工作得很好,我可以在运行时在两种模式之间切换/动画。但是我最终想要实现的是基于当前窗口大小的自动扩展/压缩(或者当用户调整窗口大小时在两者之间切换)。我希望这个控件可以在没有窗口/视图控制器管理开关的情况下重复使用,并试图避免在基于超级视图调用内部的“粗略”估计的约束之间切换layout
(感觉就像是黑客攻击)。
似乎NSSegmentControl
等NSButton
实现NSUserInterfaceCompression
了我想要实现的目标,但是在初始布局/内在内容大小刷新/窗口调整大小等期间,该协议中的任何方法都不会被调用。我还发现缺少文档;我发现的唯一有用的信息是在NSSegmentControl
头文件中。该协议似乎正是我所需要的 - 系统调用适当的方法来确定最小/理想大小并在空间有限时要求控件调整自身大小。
对于它的价值,我也尝试过子类化NSButton
(出于各种原因,我需要坚持使用子类NSView
化)——但这也没有触发任何这些方法(即 from NSUserInterfaceCompression
)。
知道我错过了什么吗?