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即可直接使用它。