在 SwiftUI 中Spacer()
文档:https://developer.apple.com/documentation/swiftui/spacer https://developer.apple.com/documentation/swiftui/spacer我们可以看到:“一个灵活的空间,可以沿其包含的堆栈布局的主轴扩展,如果不包含在堆栈中,则可以在两个轴上扩展。”
所使用的机制是什么Spacer
知道它是否在 a 内VStack
or HStack
?
我还看到其中一个初始化程序使用了以下内容:
init(minLength: CGFloat? = nil)
“该垫片可以沿着一个或多个膨胀轴收缩到的最小长度”
我怎么知道“扩展轴”?
我的应用程序在枚举中有 5 个预定义的间距常量,我想创建一个自定义初始化程序(或静态方法),它返回一个 Spacer() ,其中包含我的一个空间常量,该常量同时用作最小值和最大值时间,但在当前轴上。
例如,我可以这样做:
extension Spacer {
static func spacing(_ spacing: SpaceEnum) -> some View {
return Spacer().frame(width: spacing.value, height: spacing.value)
}
}
问题是,间隔器是一个正方形,它不知道我们是在 VStack 还是 HStack 内。
我怎样才能做到这一点?
理想情况下,我想要这样的东西:
Spacer(space: .small)
VStack 内部执行以下操作:Spacer().frame(height: SpaceEnum.small.value)
Or
Spacer(space: .extraLarge)
HStack 内部执行以下操作:Spacer().frame(width: SpaceEnum.extraLarge.value)
有什么想法或建议吗?
也许,不知何故我必须使用GeometryReader
or alignmentGuide
, 我不知道。
使用正方形不是一个好主意,当 VStack 宽度小于空间时,它会导致问题。或者当HStack高度小于自定义空间常数时。
多谢。