Ios 如何检查屏幕上是否显示视图?(Swift 5和SwiftUI)

Ios 如何检查屏幕上是否显示视图?(Swift 5和SwiftUI),ios,swift,xcode,swiftui,swift5,Ios,Swift,Xcode,Swiftui,Swift5,我有一个如下的观点。我想知道屏幕上显示的是否是视图。是否有实现这一目标的功能 struct TestView: View { var body: some View { Text("Test View") } } 您可以在符合视图协议的任何类型的视图上使用onAppear struct TestView: View { @State var isViewDisplayed = false var body: some View {

我有一个如下的观点。我想知道屏幕上显示的是否是视图。是否有实现这一目标的功能

struct TestView: View {
    var body: some View {
        Text("Test View")
    }
}

您可以在符合视图协议的任何类型的视图上使用onAppear

struct TestView: View {
    @State var isViewDisplayed = false
    var body: some View {
        Text("Test View")
        .onAppear {
            self.isViewDisplayed = true
        }
        .onDisappear {
            self.isViewDisplayed = false
        }
    }

    func someFunction() {
        if isViewDisplayed {
            print("View is displayed.")
        } else {
            print("View is not displayed.")
        }
    }
}

可以使用GeometryReader和GeometryProxy检查全局范围中的视图位置

        struct CustomButton: View {
            var body: some View {
                GeometryReader { geometry in
                    VStack {
                        Button(action: {
                        }) {
                            Text("Custom Button")
                                .font(.body)
                                .fontWeight(.bold)
                                .foregroundColor(Color.white)
                        }
                        .background(Color.blue)
                    }.navigationBarItems(trailing: self.isButtonHidden(geometry) ?
                            HStack {
                                Button(action: {
                                }) {
                                    Text("Custom Button")
                                } : nil)
                }
            }

            private func isButtonHidden(_ geometry: GeometryProxy) -> Bool {
    // Alternatively, you can also check for geometry.frame(in:.global).origin.y if you know the button height.
                if geometry.frame(in: .global).maxY <= 0 {
                    return true
                }
                return false
            }
struct自定义按钮:视图{
var body:一些观点{
GeometryReader{中的几何体
VStack{
按钮(操作:{
}) {
文本(“自定义按钮”)
.font(.body)
.fontWeight(.粗体)
.foregroundColor(颜色.白色)
}
.背景(颜色.蓝色)
}.navigationBarItems(尾部:self.isButtonHidden(几何体)?
HStack{
按钮(操作:{
}) {
文本(“自定义按钮”)
}:无)
}
}
私有函数是ButtonHidden(u几何体:GeometryProxy)->Bool{
//或者,如果知道按钮高度,也可以检查geometry.frame(in:.global).origin.y。

if geometry.frame(in:.global.maxY)谢谢,但是有没有一种方法可以在函数中实现这一点,比如
private func(){if(TestView.isDisplayed()){do something}
?您需要指定您的要求是检查视图是否显示在外部函数中。我已根据您的要求修改了我的答案。谢谢,我已经解决了它。我会将您的答案标记为正确。:)这不是真正的屏幕显示。即使它没有显示在屏幕上,也会调用它。只需加载view它将调用
.onAppear()
您希望将主动行为转换为SwiftUI的被动行为。在SwiftUI概念中,某些状态(或视图模型中或@state中)决定视图是否可见。因此,有了这种状态,您无需询问view即可直接使用它。