Установить NSWindow Размер программно не работает - PullRequest
0 голосов
/ 03 мая 2019

Я новичок в macOS и имею очень простой проект с одной меткой в ​​ViewController.В WindowController я пытаюсь установить размер окна с этим кодом:

    import Cocoa

class WindowController: NSWindowController {

  override func windowDidLoad() {
    super.windowDidLoad()
    if let window = window, let screen = NSScreen.main {
      let screenRect = screen.visibleFrame
      print("screenRect \(screenRect)")

    window.setFrame(NSRect(x: screenRect.origin.x, y: screenRect.origin.y, width: screenRect.width/2.0, height: screenRect.height/2.0), display: true, animate: true)
      print("windowFrame \(window.frame)")
      }
  }
}

Журнал показывает:

screenRect (0.0, 30.0, 1680.0, 997.0)
windowFrame (0.0, 30.0, 840.0, 499.0)

Однако на окно это не влияет, т.е.все, что я ввожу как ширину / высоту, остается неизменнымЕсли я изменю размер с помощью мыши, в следующий раз я открою его, точно старый размер.

enter image description here

Любая идея, которую я мог упустить в раскадровке илигде-нибудь еще?Сдается мне, что я что-то забыл, так как это так просто ..... (ярлык - ограничение сверху, слева, справа)

enter image description here

Ответы [ 2 ]

0 голосов
/ 03 мая 2019

... загрузил ...

   // decide if needed..
    let when = DispatchTime.now() + 0.5
    DispatchQueue.main.asyncAfter(deadline: when, execute: {  [weak self] in

        self?.setSize()

    })
}   //setupUI


private final func setSize(){
    if let w = self.view.window{
        var frame = w.frame
        frame.size = NSSize(width: 800, height: 600)
        w.setFrame(frame, display: true, animate: true)

    }
}

примечание: на didLoad без небольшой задержки не работает. (ноль ссылок ...)

0 голосов
/ 03 мая 2019

Нашел его, благодаря PUTTIN Почему аниматор NSWindow setFrame: display: animate: иногда не работал?

Волшебная вещь - иметь его на главной теме

DispatchQueue.main.async {
window.setFrame(NSRect(x: screenRect.origin.x, y: screenRect.origin.y, width: screenRect.width/1.0, height: screenRect.height/1.0), display: true, animate: true)
  print("windowFrame \(window.frame)")
    }
}

Теперь все работает!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...