Je veux créer un menu déroulant dans Xcode 11 Beta 1. Mais je n'ai pas trouvé de moyen d'y accéder dans iOS.
Je l'ai essayé avec la fonction .hidden et j'ai trouvé le PullDownButton, mais je ne sais pas comment le configurer
J'ai créé ce code
struct SwiftUIView : View {
@State var array = true
@State var buttonTitle = "Zeige Deteils"
var body: some View {
VStack {
VStack {
Button(action: {
self.array.toggle()
}) {
Text(buttonTitle)
}
if array {
VStack(spacing: 1.0) {
Button(action: {
self.buttonTitle = "Schmelzpunkt"
self.array.toggle()
}) {
Text("Schmelzpunkt")
.color(.white)
.padding(.all)
}
.background(Color.blue)
Button(action: {
self.buttonTitle = "Instrumentelle Analytik"
self.array.toggle()
}) {
Text("Instrumentelle Analytik")
.color(.white)
.padding(.all)
}.background(Color.blue)
Button(action: {
self.buttonTitle = "Aussehen"
self.array.toggle()
}) {
Text("Aussehen")
.color(.white)
.padding(.all)
}.background(Color.blue)
}
.padding(.top)
}
}
}
}
Mais ne peut pas trouver un était pour animer le "pop-up" auf des boutons cachés et vouloir que le bouton principal reste à sa position
Text("Options")
.contextMenu {
Button(action: {
// change country setting
}) {
Text("Choose Country")
}
Button(action: {
// enable geolocation
}) {
Text("Detect Location")
}
}
extrait de https://www.hackingwithswift.com/quick-start/swiftui/how-to-show-a-context-men Faites un clic droit dessus pour afficher la vue
Vous devez utiliser une superposition pour afficher votre liste déroulante. Sinon, la disposition des parents sera erronée lorsque vous afficherez et masquerez la liste déroulante.
Voici une réponse simple, et la réponse complète pourrait être trouvée ici
struct Dropdown: View {
var options: [DropdownOption]
var onSelect: ((_ key: String) -> Void)?
var body: some View {
VStack(alignment: .leading, spacing: 0) {
ForEach(self.options, id: \.self) { option in
DropdownOptionElement(val: option.val, key: option.key, onSelect: self.onSelect)
}
}
.background(Color.white)
.cornerRadius(dropdownCornerRadius)
.overlay(
RoundedRectangle(cornerRadius: dropdownCornerRadius)
.stroke(Color.coreUIPrimary, lineWidth: 1)
)
}
}
struct DropdownButton: View {
@State var shouldShowDropdown = false
@Binding var displayText: String
var options: [DropdownOption]
var onSelect: ((_ key: String) -> Void)?
let buttonHeight: CGFloat = 30
var body: some View {
Button(action: {
self.shouldShowDropdown.toggle()
}) {
HStack {
Text(displayText)
Spacer()
.frame(width: 20)
Image(systemName: self.shouldShowDropdown ? "chevron.up" : "chevron.down")
}
}
.padding(.horizontal)
.cornerRadius(dropdownCornerRadius)
.frame(height: self.buttonHeight)
.overlay(
RoundedRectangle(cornerRadius: dropdownCornerRadius)
.stroke(Color.coreUIPrimary, lineWidth: 1)
)
.overlay(
VStack {
if self.shouldShowDropdown {
Spacer(minLength: buttonHeight + 10)
Dropdown(options: self.options, onSelect: self.onSelect)
}
}, alignment: .topLeading
)
.background(
RoundedRectangle(cornerRadius: dropdownCornerRadius).fill(Color.white)
)
}
}