不可调整大小 window swift
Non-resizable window swift
我有一个名为 Hardness
的 NSViewController
,我不需要让用户调整它的大小。当然,每次用户尝试时我都可以调整它的大小,但是有什么办法可以不让用户打开 window 到全屏,或者拉伸 window?
edit/update: Xcode 10.2 • Swift 5
NSWindow 有一个名为 styleMask 的 属性,它允许您控制对用户可用的控件类型。如果您不想让用户调整 window 的大小,您必须使用变异方法 remove(member: NSWindowStyleMask)
删除样式掩码 .resizable。要再次启用它,您需要使用变异方法 insert(member: NSWindowStyleMask)
。请注意,它还将禁用 window:
的全屏模式
删除以禁用:
window.styleMask.remove(.resizable)
正在插入以启用
window.styleMask.insert(.resizable)
样本
import Cocoa
class ViewController: NSViewController {
@IBOutlet weak var closable: NSButton!
@IBOutlet weak var miniaturizable: NSButton!
@IBOutlet weak var resizable: NSButton!
@IBOutlet weak var titled: NSButton!
lazy var window: NSWindow! = self.view.window
func remove(_ member: NSWindow.StyleMask) {
window.styleMask.remove(member)
}
func insert(_ member: NSWindow.StyleMask) {
window.styleMask.insert(member)
}
@IBAction func toggle(_ sender: NSButton) {
switch sender.state {
case .on:
switch sender {
case closable: insert(.closable)
case miniaturizable: insert(.miniaturizable)
case resizable: insert(.resizable)
case closable: insert(.closable)
case titled: insert(.titled)
default: break
}
case .off:
switch sender {
case closable: remove(.closable)
case miniaturizable: remove(.miniaturizable)
case resizable: remove(.resizable)
case closable: remove(.closable)
case titled: remove(.titled)
default: break
}
default: break
}
}
}
除当前答案外,此答案可能还有一些帮助。还有一个很好的简单方法可以通过使用 setHidden
和 NSWindowZoomButton
来完成此操作
将功能设置为 NSWindow
的子 class:
Objective-C
#import "CustomWindow.h"
@implementation CustomWindow
- (void)awakeFromNib {
NSButton *zoomButton = [self standardWindowButton:NSWindowZoomButton];
[zoomButton setHidden:YES];
}
@end
Swift
import CustomWindow
class CustomWindow {
func awakeFromNib() {
var zoomButton: NSButton = self.standardWindowButton(NSWindowZoomButton)
zoomButton.setHidden(true)
}
}
在 IB 中将自定义 class 连接到您的 window,现在应该隐藏 Zoom
按钮!
正确的方法是使用 bitwise operators。
禁用 调整大小:
window?.styleMask &= ~NSResizableWindowMask
启用 调整大小:
window?.styleMask |= NSResizableWindowMask
Swift 3 的更优雅的解决方案,以便 |可以使用运算符:
public func | (left: NSWindowStyleMask, right: NSWindowStyleMask) -> NSWindowStyleMask {
return NSWindowStyleMask(rawValue: left.rawValue | right.rawValue)
}
我通过
中的一行代码解决了不可调整大小 window 的相同问题
override func viewDidAppear() {
self.view.window?.styleMask.remove(NSWindowStyleMask.Resizable)
}
我有一个名为 Hardness
的 NSViewController
,我不需要让用户调整它的大小。当然,每次用户尝试时我都可以调整它的大小,但是有什么办法可以不让用户打开 window 到全屏,或者拉伸 window?
edit/update: Xcode 10.2 • Swift 5
NSWindow 有一个名为 styleMask 的 属性,它允许您控制对用户可用的控件类型。如果您不想让用户调整 window 的大小,您必须使用变异方法 remove(member: NSWindowStyleMask)
删除样式掩码 .resizable。要再次启用它,您需要使用变异方法 insert(member: NSWindowStyleMask)
。请注意,它还将禁用 window:
删除以禁用:
window.styleMask.remove(.resizable)
正在插入以启用
window.styleMask.insert(.resizable)
样本
import Cocoa
class ViewController: NSViewController {
@IBOutlet weak var closable: NSButton!
@IBOutlet weak var miniaturizable: NSButton!
@IBOutlet weak var resizable: NSButton!
@IBOutlet weak var titled: NSButton!
lazy var window: NSWindow! = self.view.window
func remove(_ member: NSWindow.StyleMask) {
window.styleMask.remove(member)
}
func insert(_ member: NSWindow.StyleMask) {
window.styleMask.insert(member)
}
@IBAction func toggle(_ sender: NSButton) {
switch sender.state {
case .on:
switch sender {
case closable: insert(.closable)
case miniaturizable: insert(.miniaturizable)
case resizable: insert(.resizable)
case closable: insert(.closable)
case titled: insert(.titled)
default: break
}
case .off:
switch sender {
case closable: remove(.closable)
case miniaturizable: remove(.miniaturizable)
case resizable: remove(.resizable)
case closable: remove(.closable)
case titled: remove(.titled)
default: break
}
default: break
}
}
}
除当前答案外,此答案可能还有一些帮助。还有一个很好的简单方法可以通过使用 setHidden
和 NSWindowZoomButton
将功能设置为 NSWindow
的子 class:
Objective-C
#import "CustomWindow.h"
@implementation CustomWindow
- (void)awakeFromNib {
NSButton *zoomButton = [self standardWindowButton:NSWindowZoomButton];
[zoomButton setHidden:YES];
}
@end
Swift
import CustomWindow
class CustomWindow {
func awakeFromNib() {
var zoomButton: NSButton = self.standardWindowButton(NSWindowZoomButton)
zoomButton.setHidden(true)
}
}
在 IB 中将自定义 class 连接到您的 window,现在应该隐藏 Zoom
按钮!
正确的方法是使用 bitwise operators。
禁用 调整大小:
window?.styleMask &= ~NSResizableWindowMask
启用 调整大小:
window?.styleMask |= NSResizableWindowMask
Swift 3 的更优雅的解决方案,以便 |可以使用运算符:
public func | (left: NSWindowStyleMask, right: NSWindowStyleMask) -> NSWindowStyleMask {
return NSWindowStyleMask(rawValue: left.rawValue | right.rawValue)
}
我通过
中的一行代码解决了不可调整大小 window 的相同问题override func viewDidAppear() {
self.view.window?.styleMask.remove(NSWindowStyleMask.Resizable)
}