首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义弹出显示时SwiftUI导航栏的外观和功能

自定义弹出显示时SwiftUI导航栏的外观和功能
EN

Stack Overflow用户
提问于 2021-01-25 10:42:12
回答 1查看 612关注 0票数 2

我试图显示一个自定义弹出,而在显示时,我需要禁用和黑暗的背景,就像它是在内置警报功能。但是,当视图中有导航条时,颜色层不能放在导航条的顶部。

期望的结果就像在内置警报修饰符中所做的那样,使整个背景变暗(用navbar),同时禁用与背景(和navbar)交互的能力。

是否有一种方法可以实现与内置警报修饰符相同的功能和外观?

示例项目代码

代码语言:javascript
复制
import SwiftUI

struct ContentView: View {
    @State private var isShowingPopup = false
    
    var body: some View {
        NavigationView {
            VStack {
                Text("Just a random text")
                    .padding(.bottom, 100)
                Button("Show popup") {
                    isShowingPopup = true
                }
            }
            .showPopup(isActive: isShowingPopup, action: { isShowingPopup = false })
            .navigationBarTitle("Test navbar", displayMode: .inline)
            .navigationBarItems(
                trailing: Button(
                    action: { print("profile tapped")},
                    label: {
                        Text("Profile")
                    }
                )
            )
        }
    }
}

extension View {
    func showPopup(
        isActive: Bool,
        action: @escaping () -> Void
    ) -> some View {
        ZStack {
            self
            if isActive {
                Color.black
                    .frame(maxWidth: .infinity, maxHeight: .infinity)
                    .edgesIgnoringSafeArea(.all)
                    .opacity(0.51)
                    .zIndex(1)
                Popup(action: action)
                    .zIndex(2)
            }
        }
    }
}

struct Popup: View {
    let action: () -> Void
    
    var body: some View {
        VStack {
            Text("This is a popup")
                .foregroundColor(.black)
                .padding()
            Button("OK", action: action)
                .foregroundColor(.blue)
        }
        .background(Color.white)
        .cornerRadius(8)
    }
}

谢谢你的帮忙!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-25 10:50:41

加上最后一个。将showPopup添加到NavigationView的最后一个

代码语言:javascript
复制
NavigationView {
    VStack {
        Text("Just a random text")
            .padding(.bottom, 100)
        Button("Show popup") {
            isShowingPopup = true
        }
    }
    
    .navigationBarTitle("Test navbar", displayMode: .inline)
    .navigationBarItems(
        trailing: Button(
            action: { print("profile tapped")},
            label: {
                Text("Profile")
            }
        )
    )
}
.showPopup(isActive: isShowingPopup, action: { isShowingPopup = false }) //<---Here
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65883129

复制
相关文章

相似问题

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