在 SwiftUI 中有条件地应用覆盖
Conditionally apply overlay in SwiftUI
我有一个叠加按钮,我想在我们不在第一个视图中的条件下出现!
在第一页,我希望用户点击这个按钮来添加用户。
之后,我希望用户使用此叠加层导航表单
但是,我无法让叠加层有条件地格式化,所以如果 'views > 1' 它会这样做,所以它看起来像这样。
'''
//
// ContentView.swift
// PartyUp
//
// Created by Aarya Chandak on 3/9/22.
//
import SwiftUI
struct PartyPage: View {
@State private var viewModel = User.userList
@State var views = 0
@State private var cur = 0;
private var pages = 3;
var body: some View {
if(viewModel.isEmpty) {
VStack {
RSVPView()
}
} else {
ZStack {
VStack{
Text("Lets plan something!").padding()
Button(action: {views += 1}, label: { Image(systemName: "person.badge.plus")
})
}
if(views == 1) {
InviteScreen()
}
if(views == 2) {
PlanningScreen()
}
if(views == 3) {
ReviewScreen()
}
}
.overlay(
Button(action: {
withAnimation(.easeInOut) {
if(views <= totalPages){
views += 1;
}
else {
views = 0
}
}
}, label: {
Image(systemName: "chevron.right")
.font(.system(size:20, weight: .semibold))
.frame(width: 33, height: 33)
.background(.white)
.clipShape(Circle())
// Circuclar Slide
.overlay(
ZStack{
Circle()
.stroke(Color.black.opacity(0.04), lineWidth: 4)
.padding(-3)
Circle()
.trim(from: 0.0, to: CGFloat(views/pages))
.stroke(Color.white, lineWidth: 4)
.rotationEffect(.init(degrees: -90))
}
.padding(-3)
)
}
),alignment: .bottom).foregroundColor(.primary)
}
}
'''
几乎所有修饰符都接受 nil
值,因为 没有变化。
所以基本上你可以写
.overlay(views > 1 ? Button(action: { ... }, label: { ... }) : nil)
如果将按钮提取到额外的视图结构中,它会变得更清晰。
我有一个叠加按钮,我想在我们不在第一个视图中的条件下出现!
在第一页,我希望用户点击这个按钮来添加用户。
之后,我希望用户使用此叠加层导航表单
但是,我无法让叠加层有条件地格式化,所以如果 'views > 1' 它会这样做,所以它看起来像这样。
'''
//
// ContentView.swift
// PartyUp
//
// Created by Aarya Chandak on 3/9/22.
//
import SwiftUI
struct PartyPage: View {
@State private var viewModel = User.userList
@State var views = 0
@State private var cur = 0;
private var pages = 3;
var body: some View {
if(viewModel.isEmpty) {
VStack {
RSVPView()
}
} else {
ZStack {
VStack{
Text("Lets plan something!").padding()
Button(action: {views += 1}, label: { Image(systemName: "person.badge.plus")
})
}
if(views == 1) {
InviteScreen()
}
if(views == 2) {
PlanningScreen()
}
if(views == 3) {
ReviewScreen()
}
}
.overlay(
Button(action: {
withAnimation(.easeInOut) {
if(views <= totalPages){
views += 1;
}
else {
views = 0
}
}
}, label: {
Image(systemName: "chevron.right")
.font(.system(size:20, weight: .semibold))
.frame(width: 33, height: 33)
.background(.white)
.clipShape(Circle())
// Circuclar Slide
.overlay(
ZStack{
Circle()
.stroke(Color.black.opacity(0.04), lineWidth: 4)
.padding(-3)
Circle()
.trim(from: 0.0, to: CGFloat(views/pages))
.stroke(Color.white, lineWidth: 4)
.rotationEffect(.init(degrees: -90))
}
.padding(-3)
)
}
),alignment: .bottom).foregroundColor(.primary)
}
}
'''
几乎所有修饰符都接受 nil
值,因为 没有变化。
所以基本上你可以写
.overlay(views > 1 ? Button(action: { ... }, label: { ... }) : nil)
如果将按钮提取到额外的视图结构中,它会变得更清晰。