SwiftUI中如何将NavigationLink定位在距底部指定距离处
两种实现按钮定位的方案
方案一:保留VStack,将按钮定位在VStack底部附近
VStack默认会把内容垂直居中,要把按钮推到靠近底部的位置,只需在按钮上方添加Spacer(),它会占据VStack内剩余的垂直空间,把按钮挤到下方,再通过padding设置按钮与VStack底部的间距:
struct SomScreen: View { var body: some View { ZStack{ Image("SomeImage") .resizable() .scaledToFill() .padding() VStack { Spacer() // 占据上方剩余空间,将按钮推至下方 NavigationLink(destination: SomeNextScreen(), label: { buttonToGetToNextScreen() }) .padding(.bottom, 40) // 自定义按钮距VStack底部的距离,数值可按需调整 } } } }
方案二:移除VStack,直接将按钮定位在屏幕底部附近
如果不需要VStack,可直接在ZStack里利用frame的对齐属性,配合padding控制按钮与屏幕底部的距离:
struct SomScreen: View { var body: some View { ZStack{ Image("SomeImage") .resizable() .scaledToFill() .padding() NavigationLink(destination: SomeNextScreen(), label: { buttonToGetToNextScreen() }) .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .bottom) // 将按钮对齐到屏幕底部 .padding(.bottom, 40) // 自定义按钮距屏幕底部的距离,数值可按需调整 } } }
若需要更精准的像素级定位,也可以用GeometryReader获取屏幕尺寸实现:
struct SomScreen: View { var body: some View { GeometryReader { geo in ZStack{ Image("SomeImage") .resizable() .scaledToFill() .padding() NavigationLink(destination: SomeNextScreen(), label: { buttonToGetToNextScreen() }) .position(x: geo.size.width / 2, y: geo.size.height - 40) // x轴居中,y轴距离底部40个单位 } } } }
内容的提问来源于stack exchange,提问作者Huckleberry Carignan
相关产品推荐
相关产品推荐

