如何更改窗口框架大小而不更改其位置

时间:2018-01-27 15:15:37

标签: swift macos cocoa

self.view.window?.frame.size.width = 430
self.view.window?.frame.size.height = 310

heightwidthread-only,因此更改frame维度的唯一方法是使用以下代码重新为其分配NSRect ,

self.view.window?.setFrame(NSMakeRect(0, 0, 430, 310), display: true, animate: true)

有没有办法在不改变位置的情况下改变窗框大小?

2 个答案:

答案 0 :(得分:1)

您可以使用原始origin的{​​{1}}并制作一个不同大小的新frame

例如:

NSRect

像这样使用:

func resizeFrame(newWidth: CGFloat, newHeight: CGFloat) {
    if let originalFrame = view.window?.frame {
        let newSize = CGSize(width: newWidth, height: newHeight)
        view.window?.setFrame(NSRect(origin: originalFrame.origin, size: newSize), display: true, animate: true)
    }
}

希望有所帮助。

答案 1 :(得分:1)

正如Gerd K所说,y坐标需要调整。为了节省其他人的时间,以下是按照pbodsk的示例进行的计算:

func resizeFrame(newWidth: CGFloat, newHeight: CGFloat) {

    if let originalFrame = view.window?.frame {
        let newY = originalFrame.origin.y + originalFrame.size.height - newHeight
        view.window?.setFrame(NSRect(x: originalFrame.origin.x, y: newY, width: newWidth, height: newHeight), display: true, animate: true)
    }
}

用法:

resizeFrame(newWidth: 430, newHeight: 310)