通过NSSize
,主窗口具有最小的宽度,高度和长宽比。但是,当窗口缩放到最小尺寸时,如果调整大小事件不断从顶部触发,它将开始在屏幕上向下运行。或右窗角。
这里是否缺少窗口属性?
let contentView = ContentView()
.frame(minWidth: 120, maxWidth: .infinity, minHeight: 50, maxHeight: .infinity)
.edgesIgnoringSafeArea(.all)
/// Create the window and set the content view.
window = NSWindow(
contentRect: NSRect(x: 0, y: 0, width: 120, height: 50),
styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView],
backing: .buffered, defer: false, onKeyDown: handleKeyDownEvent)
window.contentView = NSHostingView(rootView: contentView)
window.contentView?.window?.aspectRatio = NSSize(
width: 120,
height: 50
)
试图阻止通过窗口委托方法windowWillResize(_:to:)
source调整窗口大小,但是当窗口被挤压时,它仍然在运行。
还尝试使用windowWillMove(_:)
source打印窗口位置,并意图阻止它移动。但是,通过挤压窗口更改的位置不会在调试控制台中捕获。
答案 0 :(得分:0)
删除
window.contentView?.window?.aspectRatio = NSSize(
width: 120,
height: 50
)
使窗口按比例调整大小的更好方法是在windowWillResize(_:to:)
和NSWindowDelegate
方法中进行调整。如果您以编程方式设置了所有用户界面,请不要忘记设置window.delegate
。
extension AppDelegate: NSWindowDelegate {
func windowWillResize(_ sender: NSWindow, to frameSize: NSSize) -> NSSize {
return CGSize(width: frameSize.height * SOME_RATIO, height: frameSize.height)
}
}