繁体   English   中英

SwiftUI:在主视图上显示模态(实际上不是模态)视图时,如何限制视图的可点击区域?

[英]SwiftUI: How can I restrict the tappable area of a view when presenting a modal(actually not modal) view over a main view?

我正在开发基于带有三个 TabItem 的 Tabview 的应用程序。 每个 TabItem 都是一个列表,我将能够在这些列表上显示一种模式视图。 当我无法将工作表称为模态视图时,问题就变成了,因为工作表几乎是全窗口的。 我需要某种底部模态视图,所以我创建了一个视图,我在具有更高 ZIndex 的列表上呈现。 它似乎可以工作,直到您单击选项卡栏并选择另一个已部署“模态”视图的 TabItem。 错误是:

[TableView] 仅警告一次:UITableView 被告知在不在视图层次结构中布局其可见单元格和其他内容(表视图或其超视图之一尚未添加到窗口中)。 这可能会通过强制表视图中的视图加载和执行没有准确信息(例如表视图边界、特征集合、布局边距、安全区域插入等)的视图来导致错误,并且还会由于额外的布局传递而导致不必要的性能开销.

所以,我想作为将可点击区域限制为“模态”视图区域的解决方案。 ¿有没有办法实现这一目标?

在此处输入图片说明

可能您有一些条件状态,具体取决于您呈现“类似模态”的视图,因此根据相同的条件,您可以在 TabView 下方禁用,如下所示

TabView {
// ... tabs content here
}.disabled(showingModal)

更新:这是我的意思的方法演示(使用 Xcode 11.3+ 测试)

在此处输入图片说明

struct TestTabViewModal: View {
    @State private var selectedTab = 0
    @State private var modalShown = false
    var body: some View {
        ZStack {
            TabView(selection: $selectedTab) {
                VStack {
                    Button("Show Modal") { self.modalShown = true }
                        .padding(.top, 40)
                    Spacer()
                }
                .tabItem {
                    Image(systemName: "1.circle")
                }.tag(0)

                Text("2").tabItem {
                    Image(systemName: "1.circle")
                }.tag(1)
            }.disabled(modalShown)

            if modalShown {
                RoundedRectangle(cornerRadius: 10)
                    .fill(Color.yellow)
                    .frame(width: 320, height: 240)
                    .overlay(Button("CloseMe") { self.modalShown = false })
            }
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM