我有一个包含SideBar()
和Group
的Hstack,它根据SideBar的选择显示内容。
struct Main: View {
@State private var currentScreen: AppScreen? = .analisys
var body: some View {
HStack(spacing: 0) {
SideBar()
Group {
if let currentScreen {
currentScreen.content
}
}
}
@ViewBuilder
private func SideBar() -> some View {
// The SideBar Menu
}
}
内容通过名为AppScreen的枚举进行管理
import SwiftUI
enum AppScreen: CaseIterable, Identifiable {
case analisys, trends
var id: AppScreen { self }
@ViewBuilder
var content: some View {
switch self {
case .analisys: ContentUnavailableView(name + " Non disponibile", systemImage: icon)
case .trends: TrendsView()
}
}
}
在名为TrendView
的内容中,有一个按钮应该显示一个黑色的Layer,我将其用于自定义视图的演示背景,例如alertView。(黑色层和它上面的alertView)。
现在我的问题是,如果我使用.overlay { }
调用TrendView()
内部的自定义视图,SideBar不会被黑色层遮挡。我怎样才能重新创建像alertView一样的黑色图层和重叠视图的效果呢?
struct TrendView: View {
@State private var showBlackLayer: Bool = false
var body: some View {
ZStack {
Button("Show Layer and View") {
showBlackLayer.toggle()
}
.overlay {
Color.black
.opacity(showBlackLayer ? 0.5 : 0)
.edgesIgnoringSafeArea(.all)
.onTapGesture {
showBlackLayer = false // Chiudi la vista nera
}
}
}
.buttonStyle(.borderless)
}
}
1条答案
按热度按时间mcvgt66p1#
我建议你在
Main
中使用ZStack
,而不是HStack
。这样,底层视图就能够使用全屏来显示覆盖。在底层视图上使用前导填充,以允许侧边栏也被看到。在
TrendView
中,ZStack
需要占据整个屏幕,然后覆盖应该应用于ZStack
,而不是Button
。最好使用.ignoresSafeArea
而不是.edgesIgnoringSafeArea
(已弃用)。下面是更新后的代码: