Изменить размер окна

В IB это можно сделать легко, установив флажок "Изменить размер". Моя проблема в том, что я хочу, чтобы мой основной NSWindow не изменялся, до тех пор, пока не будет нажата кнопка, а затем я хочу, чтобы она была изменчиваема.

Я прочесываю Интернет, но ничего не могу найти? Может ли окно не быть изменчивым или не программным?

Спасибо заранее всем!

Ответ 1

С 10.6 вы можете изменить маску стиля окна с помощью -[NSWindow setStyleMask:]. Итак, вы бы сделали что-то вроде этого:

В Objective-C

Чтобы сделать его изменяемым по размеру:

[window setStyleMask:[window styleMask] | NSResizableWindowMask];

Чтобы сделать его не изменяемым:

[window setStyleMask:[window styleMask] & ~NSResizableWindowMask];

В Swift

Чтобы сделать его изменяемым по размеру:

mainWindow.styleMask = mainWindow.styleMask | NSResizableWindowMask

Чтобы сделать его не изменяемым:

mainWindow.styleMask = mainWindow.styleMask & ~NSResizableWindowMask

Ответ 2

Решение Swift 3 для этой проблемы заключается в использовании класса OptionSet, описанного по адресу:

https://developer.apple.com/reference/swift/optionset

Короче:

Чтобы заменить набор флагов, вы теперь делаете что-то вроде:

myWindow.styleMask = [ .resizable, .titled, .closable ]

Чтобы добавить флаг, сделайте что-то вроде:

myWindow.styleMask.insert( [ .miniaturizable, .fullscreen ] )

Чтобы удалить флаг, выполните следующие действия:

myWindow.styleMask.remove( [ .resizable ] )

Ответ 3

Вы не можете изменить маска стиля окна после ее создания, но вы можете установить минимальный и максимальный размер окна в один размер. Сделайте это после того, как вы и ваше изменчивое окно проснетесь от nib, а затем измените максимальный и, при необходимости, минимальный размер, когда пользователь нажимает кнопку.

Ответ 4

В Xcode 8/Swift 3 попробуйте что-то вроде:

// e.g., on a view controller’s viewDidAppear() method:
if let styleMask = view.window?.styleMask
{
    view.window!.styleMask = NSWindowStyleMask(rawValue: styleMask.rawValue | NSWindowStyleMask.resizable.rawValue)
}

Ответ 5

В Swift 3,

if enabled {
  window.styleMask.update(with: .resizable)
} else {
  window.styleMask.remove(.resizable)
}