首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过ZStack禁用按钮单击

通过ZStack禁用按钮单击
EN

Stack Overflow用户
提问于 2021-08-26 04:51:12
回答 3查看 488关注 0票数 0

弹出窗口位于下面代码中的VStack顶部。但是当显示弹出式窗口时,VStack中的按钮仍然是可点击的(即使弹出窗口正在填充整个屏幕,并且下面的按钮甚至不可见)。当弹出可见时,如何禁用VStack按钮?

代码语言:javascript
复制
//MainView
ZStack {
    if self.showPopup {
        Popup()
       .zIndex(2)
    }

    VStack {
        Spacer()
        Button(action: {
        }) {
            Text("Click")
        }  
        .zIndex(1)
    }
}
 

//Popup
GeometryReader {
    geo in
        
    ZStack {
        Rectangle()
        .fill(Color.red.opacity(1.0))
        .frame(width: geo.size.width, height: geo.size.height)
        .allowsHitTesting(false)
        .zIndex(1)
            
        Text("Content")
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-08-26 05:03:49

这是因为您的.allowsHitTesting (true)修饰符:使用它,您的视图不会被触及,下面的视图将得到它。

如果您仍然希望禁用此矩形的触摸,请将contentShape添加到您的ZStack中。

代码语言:javascript
复制
GeometryReader {
    geo in
        
    ZStack {
        Rectangle()
            .fill(Color.red.opacity(1))
        .frame(width: geo.size.width, height: geo.size.height)
        .allowsHitTesting(false)
        .zIndex(1)
            
        Text("Content")
    }.contentShape(Rectangle())
}
票数 0
EN

Stack Overflow用户

发布于 2021-08-26 05:02:40

当弹出窗口显示时,将其添加到单击按钮中以禁用该按钮:

代码语言:javascript
复制
.allowsHitTesting(!showPopup)
票数 0
EN

Stack Overflow用户

发布于 2021-08-26 05:03:15

ZStack是透明的,您需要显式禁用按钮,比如

代码语言:javascript
复制
VStack {
    Spacer()
    Button(action: {
    }) {
        Text("Click")
    }  
    .disabled(self.showPopup)
    // .zIndex(1)             // not needed !!
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68932713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档