0

为了响应用户事件,我想:

  • 添加一个新的 NSView 到窗口,然后
  • 显示位于该视图正下方的 NSPanel

我已经完成了每一半。我可以添加一个新的子视图,容器视图会-updateConstraints识别它并添加正确的布局约束,以便下次执行布局时,它会在窗口中正确定位。另外,我有一个将面板放在屏幕上的 NSWindowController 子类。

不幸的是,有一个排序问题。我的面板控制器只是查看新的 NSView 的frame属性来决定将它放在哪里,但是在主事件循环的这次迭代中,该-layout方法还没有被调用,所以它仍然定位在 (0,0)。

(如果我将这两个功能分开,并且需要两个单独的用户事件用于“添加视图”和“创建面板”,那么面板将正确定位在视图下方。)

有没有办法将 NSPanel 附加到 NSView,就像使用布局约束一样?或者有没有办法说“这样做(窗口控制器的东西),但只有在下一次-layout调用之后”?

4

1 回答 1

0

只需在添加 NSView 及其约束后立即在 NSView 的超级视图上调用 -layoutSubtreeIfNeeded,这样它就会立即布局,然后添加面板。

或者使用 NSPopOver,尽管它们以某种方式绘制并且您可能不希望那样。

于 2014-02-06T08:12:12.860 回答