Изменение размера NSWindow не может автоматически изменить размер содержимого. - PullRequest
0 голосов
/ 06 мая 2018

У меня есть NSWindow с его contentView. В awakeFromNib() из NSWindow у меня есть следующий код:

override func awakeFromNib()
{
  super.awakeFromNib()
  /// Customize Window through XIBs
    self.title = "Main Window"
    let screenFrame = NSScreen.main?.frame
    let windowPercentage: CGFloat = 0.9;
    let offset: CGFloat = (1.0 - windowPercentage) / 2.0;
    let windowFrame: NSRect = NSRect(x: (screenFrame?.width)! * offset, y: (screenFrame?.height)! * offset, width: (screenFrame?.width)! * windowPercentage, height: (screenFrame?.height)! * windowPercentage )
    self.setFrame(windowFrame,display: true,animate: true)
    self.backgroundColor = NSColor.lightGray
    self.isRestorable = true


  // Customize contentView
    let viewPercentage: CGFloat = 0.6
    self.contentView?.setFrameSize(NSSize(width: self.frame.size.width * viewPercentage, height: self.frame.size.height))
    self.contentView?.setFrameOrigin( NSMakePoint( ( (self.frame.width) - (self.contentView?.frame.width)! )/2, ( (self.frame.height) - (self.contentView?.frame.height)!)/2) )
    self.contentView?.autoresizingMask = [.width, .height, .minXMargin,.maxXMargin,.maxYMargin,.minYMargin]
}

Я пытаюсь установить contentView в центре и в процентах от его NSWindow кадра, но он не работает, когда я изменяю размер окна. Как только я начинаю изменять размер окна, contentView изменяет размер неправильно, как вы можете видеть из следующего изображения (второго):

Изображение одно

enter image description here

Изображение два

enter image description here

Должен ли я переопределить метод resize(withOldSuperviewSize:) для достижения этой цели? (также авторазмер из интерфейса не решает проблему)

1 Ответ

0 голосов
/ 06 мая 2018

Вы не должны пытаться изменить размер представления контента таким образом. Я не верю, что это поддерживается. Окно управляет размером представления содержимого.

Если вы хотите, чтобы ваше собственное представление занимало только часть области содержимого окна, вы должны добавить свое представление как подпредставление представления содержимого.

...