如何使用SwiftUI访问Mac应用程序主窗口的高度?

a5g8bdjr  于 2022-12-26  发布在  Swift
关注(0)|答案(2)|浏览(162)

我一直在跟着一个教程学习SwiftUI,为我的Mac构建一个应用,教程一直假设我是为iPhone写的,直到刚才还没有出现问题。
我需要访问屏幕的高度,或者窗口的高度。本教程使用UIScreen.main.bounds.height来实现这一点,但由于UISscreen不适用于Mac应用程序,所以我尝试找到Mac的对等项。我非常确定我尝试访问的窗口类型为NSWindow。但是我在文档中没有看到任何访问NSWindow的宽度和高度的方法。最重要的是,我甚至不知道如何访问NSWindow,因为在那里我没有看到变量或任何保存该信息的东西。
This是我正在学习的教程,我需要高度的部分在这个要点的第36行末尾,它说UIScreen.main.bounds.height
在Mac应用程序中有没有简单的方法可以做到这一点?我很感激可以提供的任何帮助。

carvr3hs

carvr3hs1#

在SwiftUI中,无论你是针对iOS还是macOS,要获得屏幕的大小,你必须用GeometryReader Package 主视图。这样,你就可以轻松地访问它的大小。

struct ContentView: View {
    var body: some View {
        GeometryReader { geo in
            NavigationStack {
                HStack {
                    NavigationLink(destination: One(screenSize: geo.size)) {
                        Text("One")
                    }

                    NavigationLink(destination: Two(screenSize: geo.size)) {
                        Text("Two")
                    }
                }
            }
            .frame(width: geo.size.width, height: geo.size.height)
        }
    }
}

struct One: View {
    let screenSize: CGSize
    
    var body: some View {
        Text("I'm view One")
            .frame(width: screenSize.width, height: screenSize.height)
            .background(Color.green)
    }
}

struct Two: View {
    let screenSize: CGSize
    
    var body: some View {
        Text("I'm view Two")
            .frame(width: screenSize.width / 2, height: screenSize.height / 2)
            .background(Color.red)
    }
}

v8wbuo2f

v8wbuo2f2#

除了GeometricReader之外,您还可以使用UISscreen;

GeometryReader { geo in
   //Your code here
}
.frame(width: geo.size.width, height: geo.size.height)

Or 

.frame(width: UIScreen.main.bounds.width, height: 
 UIScreen.main.bounds.height)

相关问题