我是 SwiftUI 的新手,在按正确顺序排列堆栈以将按钮放置在右上角时遇到了麻烦。
以下是我目前所掌握的信息:
import SwiftUI
struct MainMenu: View {
var body: some View {
ZStack {
Image("RangeCattle1")
.resizable()
.scaledToFill()
.edgesIgnoringSafeArea(.all)
.frame(width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height)
VStack {
Button("Management") {
}
.buttonStyle(.borderedProminent)
.buttonBorderShape(.capsule)
.tint(.red)
Button("Calculator") {
}
.buttonStyle(.borderedProminent)
.buttonBorderShape(.capsule)
.tint(.red)
}
Spacer()
.font(.title)
}
}
}
#Preview {
MainMenu()
}
我曾尝试在 Z 内添加一个 Hstack,但它只将其放置在现有按钮后面,或者如果我添加一个垫片,它会将其推到左边。
有什么建议吗?我希望它位于右上角,与现有按钮位于同一位置。
[编辑] 我做了一些修改,这就是我现在的情况。注销按钮需要位于右上角。
import SwiftUI
struct MainMenu: View {
var body: some View {
ZStack {
Image("RangeCattle1")
.resizable()
.scaledToFill()
.edgesIgnoringSafeArea(.all)
.frame(width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height)
VStack {
VStack {
HStack {
Button("Logout") {
}
.buttonStyle(.borderedProminent)
.buttonBorderShape(.capsule)
.tint(.red)
}
}
VStack {
Button("Management") {
}
.buttonStyle(.borderedProminent)
.buttonBorderShape(.capsule)
.tint(.red)
Button("Calculator") {
}
.buttonStyle(.borderedProminent)
.buttonBorderShape(.capsule)
.tint(.red)
}
}
}
}
}
#Preview {
MainMenu()
}
[编辑-V2]
import Amplify
import Authenticator
import AWSCognitoAuthPlugin
import SwiftUI
@main
struct MyApp: App {
init() {
do {
try Amplify.add(plugin: AWSCognitoAuthPlugin())
try Amplify.configure()
} catch {
print("Unable to configure Amplify \(error)")
}
}
var body: some Scene {
WindowGroup {
Authenticator(
headerContent: {
Image("Final")
.resizable()
.scaledToFit()
.containerRelativeFrame(.horizontal) { size, axis in
size * 0.8
}
},
footerContent: {
Text("© 2024 The PATG Group, Inc. All Rights Reserved")
.font(.subheadline)
}
) { _ in
MainMenu()
}
}
}
struct MainMenu: View {
var body: some View {
ZStack {
HStack {
Button("Logout") {
// Need Code here
}
.buttonStyle(.borderedProminent)
.buttonBorderShape(.capsule)
.tint(.red)
}
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topTrailing)
.padding()
VStack(spacing: 40) {
Button("Management") {
// Need Code here
}
Button("Calculator") {
// Need Code here
}
}
.buttonStyle(.borderedProminent)
.buttonBorderShape(.capsule)
.tint(.red)
.font(.title)
}
.background {
Image("RangeCattle1")
.resizable()
.scaledToFill()
.edgesIgnoringSafeArea(.all)
.frame(width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height)
}
}
}
#Preview {
MainMenu()
}
}
最新的编辑包括主登录视图,一旦完成,就会带您进入下一个视图。不确定这是否是正确的做法,但它确实有效。
在完成之前,我想给每个人最后一次参与的机会。
我建议取消嵌套的“注销”按钮并将其显示为的直接子按钮
ZStack
。然后:.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topTrailing)
注销按钮,将其推至右上角。Image
,这样它就不会影响的布局。.background
ZStack
ZStack
UIScreen.main
和.edgesIgnoringSafeArea
都已弃用。.frame
当图像用作背景时, 无论如何都不需要(因为 的内容已经是最大尺寸)。使用ZStack
代替。.edgesIgnoringSafeArea
ignoresSafeArea
VStack
包含它们的 ,而不是为每个按钮重复修饰符。事实上,如果ZStack
不包含任何其他内容,则可以将修饰符应用于ZStack
,并从注销按钮中移除。