NSPopover иногда неправильное положение в Эль-Капитане

Я создаю небольшое приложение в строке состояния, когда я щелкаю значок, он показывает NSPopover. Все работало нормально, пока я не перешел на El Capitan. Проблема в том, что когда я впервые запускаю приложение, я автоматически имитирую нажатие значка строки состояния, потому что я хочу увидеть всплывающее окно, и оно появляется в левом нижнем углу экрана. После того, как я закрою его и снова открою, он появляется в верхней части экрана. Вы видите что-то не так? Это код, и когда я печатаю значения в showPopover, в этом нет ничего плохого.

private let menu = MenuBarController()

override init() {
    super.init()

    self.menu.onMouseDown = {
        if (self.menu.iconView?.isSelected == true) {
            self.showPopover()
        } else {
            self.hidePopover()
        }
    }
}
func showPopover() {
    let icon = self.menu.iconView!
    let edge = NSRectEdge.MinY
    let rect = icon.frame
    self.popover?.showRelativeToRect(rect, ofView: icon, preferredEdge: edge);
}
func applicationDidFinishLaunching(aNotification: NSNotification) {
    let icon = self.menu.iconView!
    icon.mouseDown(NSEvent())
}

Кроме того, если я имитирую нажатие значка после небольшой задержки, это работает.


person Cristi Băluță    schedule 17.10.2015    source источник


Ответы (1)


У меня была такая же проблема. Только что обнаружил другое решение, которое не требует задержки.

func applicationDidFinishLaunching(aNotification: NSNotification) {
    showPopover() // If you only have this, then popover will open in bottom left corner

    hidePopover() // Adding this
    showPopover() // and this will open it from the status bar button.
}
person user3225395    schedule 23.01.2017