Изменить размер окна
В 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)
}