我有一个NSWindowController
和一个NSWindow
,
我遇到一个问题,如果我设置了控制器的contentViewController
,则NSWindow
的框架会更新,超出我的预期
contentViewController
整个窗口保持不变,但只是移回原始位置
这是更新框架的代码
self.contentViewController = loadingViewController
我通过在此行之前和之后在lldb中打印出窗口的框架来确认这一点:
▿ Optional<CGRect>
▿ some : (-1701.0, 439.0, 1042.0, 778.0)
▿ origin : (-1701.0, 439.0)
- x : -1701.0
- y : 439.0
▿ size : (1042.0, 778.0)
- width : 1042.0
- height : 778.0
(lldb) po self.window?.frame
▿ Optional<CGRect>
▿ some : (-1680.0, 416.0, 800.0, 778.0)
▿ origin : (-1680.0, 416.0)
- x : -1680.0
- y : 416.0
▿ size : (1042.0, 778.0)
- width : 1042.0
- height : 778.0
更神秘的是,我最初尝试了3个不同的地方来捕捉移动的窗口,以找到导致它的代码行
我已注册为观察员:
NotificationCenter.default.addObserver(self, selector: #selector(windowMoved(notification:)), name: NSWindow.didMoveNotification, object: nil)
以及在以下位置设置符号断点:
-[NSWindow _windowMoved:] 和 -[NSWindow _setFrame:]
当我手动拖动窗口时,所有这三种方法都会引起窗口移动。
但是,当通过编程方式从^^
以上的那一行代码更改框架时,三个窗口中没有一个捕获到窗口移动有人以前看过这个吗,或者有一个可能的想法吗?
答案 0 :(得分:1)
事实证明,要把这个问题隔离到一个测试项目中需要付出很大的努力,所以我决定只放一个补丁,
我只是在设置contentViewController
之前存储了原点,然后将其重置。这对我有用,尽管我仍然不确定为什么会发生这种情况
let originalFrameOrigin = self.window?.frame.origin ?? CGPoint(x: 100, y: 100)
self.contentViewController = loadingViewController
self.window?.setFrameOrigin(originalFrameOrigin)