Ios 有没有办法在SwiftUI中创建下拉菜单/按钮?
我想在Xcode 11 Beta 1中创建一个下拉菜单。但我还没有找到在iOS中实现它的方法 我用.hidden函数尝试过,找到了下拉按钮,但不知道如何设置 我已经创建了这个代码Ios 有没有办法在SwiftUI中创建下拉菜单/按钮?,ios,xcode,drop-down-menu,swiftui,Ios,Xcode,Drop Down Menu,Swiftui,我想在Xcode 11 Beta 1中创建一个下拉菜单。但我还没有找到在iOS中实现它的方法 我用.hidden函数尝试过,找到了下拉按钮,但不知道如何设置 我已经创建了这个代码 struct SwiftUIView : View { @State var array = true @State var buttonTitle = "Zeige Deteils" var body: some View { VStack { VStack { Bu
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)
}
}
}
}
但是找不到一个was来设置隐藏按钮的“弹出”动画,并希望主按钮保持在其位置上您可能需要查看
选择器
struct ContentView : View {
@State private var selection = 1
var body: some View {
VStack {
Picker(selection: $selection, label: Text("Zeige Deteils")) {
Text("Schmelzpunkt").tag(1)
Text("Instrumentelle Analytik").tag(2)
}
}
}
}
取自
右键单击它以显示视图您需要使用覆盖显示下拉列表。否则,在显示和隐藏下拉列表时,家长的布局将出错 这里有一个简单的答案,可以找到完整的答案 在SwiftUI 2.0(iOS 14+)中,您可以使用
菜单制作下拉菜单
菜单{
钮扣{
样式=0
}标签:{
文本(“线性”)
图像(系统名称:“箭头。向下。向右。圆圈”)
}
钮扣{
样式=1
}标签:{
文本(“径向”)
图像(系统名称:“箭头。上。下。圆圈”)
}
}标签:{
文本(“样式”)
图像(系统名称:“tag.circle”)
}
使用SwiftUI 2.0
还可以使用披露组实现下拉菜单
很多不错的答案,但对我有用的是一些定制的东西,但非常类似于swiftui中的菜单
因此,从为下拉视图创建项目开始
例如
import SwiftUI
struct SampleDropDown: View {
let action : (String?) -> Void
var body: some View {
VStack(alignment: .leading, spacing: 4){
ForEach(0...3, id: \.self){ valueStore in
Button(action: {
}) {
HStack(alignment: .center, spacing: 8) {
Image(systemName: "bell")
.resizable()
.frame(width: 30, height: 30, alignment: .center)
.clipShape(Circle())
VStack (alignment: .leading){
Text("ANDROID" )
.font(.custom(Constants.FONT_REGULAR, size: 14))
.foregroundColor(Color.fromHex(Colors.TEXT_COLOR_PRIMARY))
.padding([.leading, .top], 4)
Text("#jetpack")
.font(.custom(Constants.FONT_REGULAR, size: 12))
.foregroundColor(Color.fromHex(Colors.LIGHT_GREY))
.padding([.leading, .bottom], 2)
}
}.foregroundColor(Color.fromHex(Colors.LIGHT_GREY))
}.frame(width: .none, height: .none, alignment: .center)
Divider().background(Color.fromHex(Colors.DIVIDOR))
}
}.padding(.all, 12)
.background(RoundedRectangle(cornerRadius: 6).foregroundColor(.white).shadow(radius: 2))
}
}
struct SampleDropDown_Previews: PreviewProvider {
static var previews: some View {
SampleDropDown(action: {data in}).padding()
}
}
@State var showStoreDropDown: Bool = false
//ui
HStack(alignment: .center, spacing: 16) {
//here you UI goes
}.overlay (
VStack {
if showTimeframeDropDown {
Spacer(minLength: 40)
SampleDropDown(action: { data in
})
}
}, alignment: .topLeading
).onTapGesture {
showTimeframeDropDown.toggle()
}
迄今为止:
现在只需将其添加为要显示的位置或要显示的顶部的覆盖
像这样的
例如
import SwiftUI
struct SampleDropDown: View {
let action : (String?) -> Void
var body: some View {
VStack(alignment: .leading, spacing: 4){
ForEach(0...3, id: \.self){ valueStore in
Button(action: {
}) {
HStack(alignment: .center, spacing: 8) {
Image(systemName: "bell")
.resizable()
.frame(width: 30, height: 30, alignment: .center)
.clipShape(Circle())
VStack (alignment: .leading){
Text("ANDROID" )
.font(.custom(Constants.FONT_REGULAR, size: 14))
.foregroundColor(Color.fromHex(Colors.TEXT_COLOR_PRIMARY))
.padding([.leading, .top], 4)
Text("#jetpack")
.font(.custom(Constants.FONT_REGULAR, size: 12))
.foregroundColor(Color.fromHex(Colors.LIGHT_GREY))
.padding([.leading, .bottom], 2)
}
}.foregroundColor(Color.fromHex(Colors.LIGHT_GREY))
}.frame(width: .none, height: .none, alignment: .center)
Divider().background(Color.fromHex(Colors.DIVIDOR))
}
}.padding(.all, 12)
.background(RoundedRectangle(cornerRadius: 6).foregroundColor(.white).shadow(radius: 2))
}
}
struct SampleDropDown_Previews: PreviewProvider {
static var previews: some View {
SampleDropDown(action: {data in}).padding()
}
}
@State var showStoreDropDown: Bool = false
//ui
HStack(alignment: .center, spacing: 16) {
//here you UI goes
}.overlay (
VStack {
if showTimeframeDropDown {
Spacer(minLength: 40)
SampleDropDown(action: { data in
})
}
}, alignment: .topLeading
).onTapGesture {
showTimeframeDropDown.toggle()
}
结果:
注意:这只是我的项目中的一个示例代码,请进行相应更改,但基本思想是在主机视图上使用下拉视图作为一个覆盖层。您能更具体一点吗?你说的是iOS
还是macOS
?
@State var showStoreDropDown: Bool = false
//ui
HStack(alignment: .center, spacing: 16) {
//here you UI goes
}.overlay (
VStack {
if showTimeframeDropDown {
Spacer(minLength: 40)
SampleDropDown(action: { data in
})
}
}, alignment: .topLeading
).onTapGesture {
showTimeframeDropDown.toggle()
}