
Вот код для кнопки и всплывающего окна:
struct CustomMenuView: View {
@ViewBuilder var label: Label
@ViewBuilder var content: Content
@State private var isExpanded: Bool = false
@Namespace private var namespace
var body: some View {
Button {
isExpanded.toggle()
} label: {
label.matchedTransitionSource(id: "MENUCONTENT", in: namespace)
}
.popover(isPresented: $isExpanded) {
content
.navigationTransition(.zoom(sourceID: "MENUCONTENT", in: namespace)).presentationCompactAdaptation(.popover)
}
}
}
И вот где я использую кнопку:
struct SelectorMenu: View {
@Binding var selectedLeague: League
private let leagues: [League] = [.nfl, .mlb, .nba]
var body: some View {
CustomMenuView() {
buttonLabel
} content: {
menuView
}
}
@ViewBuilder
private var buttonLabel: some View {
Text("Button")
}
@ViewBuilder
private var menuView: some View {
VStack {
Text("MENU ITEM 1")
Divider()
Text("MENU ITEM 2")
Divider()
Text("MENU ITEM 3")
Divider()
Text("MENU ITEM 4")
Divider()
Text("MENU ITEM 5")
}
.padding()
}
}
Я попробовал изменить цвет фона всплывающего окна следующим образом:
struct CustomMenuView: View {
@ViewBuilder var label: Label
@ViewBuilder var content: Content
@State private var isExpanded: Bool = false
@Namespace private var namespace
var body: some View {
Button {
isExpanded.toggle()
} label: {
label.matchedTransitionSource(id: "MENUCONTENT", in: namespace)
}
.popover(isPresented: $isExpanded) {
content
.navigationTransition(.zoom(sourceID: "MENUCONTENT", in: namespace)).presentationCompactAdaptation(.popover)
.background(.red)
}
}
}
Это меняет цвет фона всплывающего окна после его полного раскрытия, но анимация закрытия по-прежнему использует более темный материал, как показано в видео выше.
Я также пытался сделать фон презентации прозрачным, но это ничего не дало:
struct CustomMenuView: View {
@ViewBuilder var label: Label
@ViewBuilder var content: Content
@State private var isExpanded: Bool = false
@Namespace private var namespace
var body: some View {
Button {
isExpanded.toggle()
} label: {
label.matchedTransitionSource(id: "MENUCONTENT", in: namespace)
}
.popover(isPresented: $isExpanded) {
content
.navigationTransition(.zoom(sourceID: "MENUCONTENT", in: namespace)).presentationCompactAdaptation(.popover)
.presentationBackground(.clear)
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... -animation
Мобильная версия