如何用SwiftUI制作具有绝对位置的底栏
嗨,我是SwiftUI的新手,有个问题 我想制作一个可在多个视图中使用的底部栏(可重用模块) 但由于它的兄弟视图,它在每个视图中的位置都不同 以下是我尝试过的:如何用SwiftUI制作具有绝对位置的底栏,swiftui,Swiftui,嗨,我是SwiftUI的新手,有个问题 我想制作一个可在多个视图中使用的底部栏(可重用模块) 但由于它的兄弟视图,它在每个视图中的位置都不同 以下是我尝试过的: 几何导引头 但每个视图的几何体都不同 覆盖和位置(x:y:) 这也不起作用 ZStack 我的问题是 如何制作固定位置视图?(类似位置:css中的绝对位置) 这个问题的正常解决方案是什么 有没有关于SwiftUI的有用参考资料 我想使用这个模块作为底部按钮栏 struct BaseBottomButton: View { let
struct BaseBottomButton: View {
let screen = UIScreen.main.bounds
var body: some View {
Button(action: {
print("hello")
}) {
Text("Hello")
}
.frame(width: self.screen.width ,height: 40)
.background(Color.red)
}
}
从这个角度来看,它是有效的
但在这个复杂的视图中,它不起作用
这不是问题的答案 如何制作固定位置视图?(类似位置:css中的绝对位置) 但是你可以先用这样的东西:
VStack(spacing: 0) {
Spacer()
Button(action: {
print("button clicked")
}) {
Text("MY BUTTON")
}
}
VStack(spacing: 0) {
SomeView()
Spacer()
Button(action: {
print("button clicked")
}) {
Text("MY BUTTON")
}
}
这将在屏幕底部显示一个按钮。如果希望视图显示在屏幕的顶部,只需将其放置在垫片之前,如下所示:
VStack(spacing: 0) {
Spacer()
Button(action: {
print("button clicked")
}) {
Text("MY BUTTON")
}
}
VStack(spacing: 0) {
SomeView()
Spacer()
Button(action: {
print("button clicked")
}) {
Text("MY BUTTON")
}
}
最后,如果视图在垂直方向上太大,只需将其放在滚动视图中(但不要将按钮放在其中)。因此,您将实现一种效果,即按钮始终显示在底部和前部,并且视图可在其后面滚动
如果您复制并粘贴我的简单示例的以下最终代码,您将看到这种效果,并将快速了解其工作原理以及如何将其应用于您的场景:
VStack(spacing: 0) {
ScrollView(.vertical, showsIndicators: false) {
Text("some text").font(.system(size: 60)).padding()
Text("some text").font(.system(size: 60)).padding()
Text("some text").font(.system(size: 60)).padding()
Text("some text").font(.system(size: 60)).padding()
Text("some text").font(.system(size: 60)).padding()
Text("some text").font(.system(size: 60)).padding()
Text("some text").font(.system(size: 60)).padding()
Text("some text").font(.system(size: 60)).padding()
Text("some text").font(.system(size: 60)).padding()
}
Spacer()
Button(action: {
print("button clicked")
}) {
Text("MY BUTTON")
}
}
您需要显式视图容器来管理底部栏,如
struct BottomBarContainer<Content: View>: View {
let content: () -> Content
init(@ViewBuilder _ content: @escaping () -> Content) {
self.content = content
}
var body: some View {
VStack {
content()
Spacer() // << always pushes below bar to bottom
BaseBottomButton() // or any bar container here
}
}
}
你愿意添加你的代码吗?@Asperi我添加了我的示例代码和图像谢谢!!!!!我解决了我的问题,还学习了它是如何工作的+加号)。edgesIgnoringSafeArea(.vertical)这也是我的解决方案
BottomBarContainer {
NewView()
}