如何清除视图框架

Posted

技术标签:

【中文标题】如何清除视图框架【英文标题】:How to Clear a View Frame 【发布时间】:2020-10-20 02:38:54 【问题描述】:

我在视图中有一个重置按钮,轻按时会显示询问“您确定吗?”的警报。带有点击确定或取消的选项。如果用户点击确定,我希望按钮消失并显示“所有数据已被删除”。我尝试放置代码以显示警报下的最后一条消息,但我不断收到有关未使用代码的警告,因此将其放置在结构的较低位置。目前,当点击 Ok 时,警报消失,代码将按钮推到视图顶部并在下方居中显示完成消息。我猜我需要删除按钮框架,但不知道该怎么做。

@EnvironmentObject var userData: UserData
@State private var resetSys: Bool = false
@State private var okTapped: Bool = false

var body: some View 
        ZStack   
            Button(action: 
                self.resetSys.toggle()
                
            ) 
                RoundedRectangle(cornerRadius: 25)
                .fill(Color.green)
                .frame(width: 165, height: 85)

                Text("Reset Data?")
                    
            .disabled(okTapped)
        
        .navigationBarTitle("Reset Trip Data", displayMode: .inline)
        
        .alert(isPresented: $resetSys) 
            
            Alert(title: Text("Are you sure?"), primaryButton: .destructive (Text("OK")) 
                okTapped = true
                self.userData.resetSysData()
            ,
            secondaryButton: .cancel()
            )
        
        
        if okTapped == true 
        
            ZStack 
                Color.white
                Text("All Data has been Deleted")
        
    

【问题讨论】:

【参考方案1】:

我不确定,也许你需要这样:

@EnvironmentObject var userData: UserData
@State private var resetSys: Bool = false
@State private var okTapped: Bool = false

var body: some View 
        ZStack   
            if !self.okTapped 
                Button(action: 
                    self.resetSys.toggle()
                    
                ) 
                    RoundedRectangle(cornerRadius: 25)
                        .fill(Color.green)
                        .frame(width: 165, height: 85)
                    
                    Text("Reset Data?")
                    
                .disabled(okTapped)
             else 
                Color.white
                Text("All Data has been Deleted")
            
        
        .navigationBarTitle("Reset Trip Data", displayMode: .inline)
        .alert(isPresented: $resetSys) 
            
            Alert(title: Text("Are you sure?"), primaryButton: .destructive (Text("OK")) 
                okTapped = true
                self.userData.resetSysData()
            ,
            secondaryButton: .cancel()
            )
        
    

【讨论】:

非常感谢 leorider!效果很好!我确实必须在 RoundedRectangle 和下面的文本周围添加另一个 ZStack 才能将文本放在彩色按钮的顶部。

以上是关于如何清除视图框架的主要内容,如果未能解决你的问题,请参考以下文章

使用 Ionic 框架在登录/注销时清除历史记录并重新加载页面

SwiftUI Textfield - 如何在编辑模式下设置文本字段的背景颜色以清除

如何从DbContext中清除未插入的POCO? - 实体框架代码优先

如何在自定义视图中将子视图的框架设置为其父框架

如果我转换视图框架,子视图框架如何变化?

即使清除缓存 laravel 后视图也不刷新