SwiftUI 中的填充、偏移或位置

Posted

技术标签:

【中文标题】SwiftUI 中的填充、偏移或位置【英文标题】:Padding, offset, or position in SwiftUI 【发布时间】:2021-06-02 19:39:18 【问题描述】:

我正在尝试定位一个圆,使其中心位于这样的矩形顶部。圆的直径不必与矩形的宽度相同。

我想了解的是,实现这一目标的最佳和最实用的方法是什么?在这种情况下,我应该使用填充、偏移或位置吗?它是否适用于不同的设备/屏幕尺寸?好像哪一个都可以用,但哪个更理想呢?

这就是我使用padding 的结果。我可以增加底部填充以达到我想要的效果,但不确定这是否是最好的方法。

Rectangle()
    .fill(Color.gray)
    .frame(width: 85, height: 175)
    .overlay(
        Circle()
            .fill(Color.black)
            .frame(width: 120)
            .padding(.bottom, 50)
    )

【问题讨论】:

【参考方案1】:

对于形状,一个好的方法是像这样组合叠加和偏移:

Rectangle()
    .fill(Color.red)
    .frame(width: 100, height: 180)
    .overlay(
        Circle()
            .fill(Color.blue.opacity(0.5))
            .frame(width: 100)
            .offset(y: -90)
    )

【讨论】:

如果将图像叠加到形状上,您还会使用偏移量还是其他一种? 是的,叠加/偏移可以很好地协同工作,无论它们应用于何种视图【参考方案2】:

这是一种可能的方法 - 仅使用对齐而不用硬编码偏移/位置。

使用 Xcode 12.4 / ios 14.4 准备的演示

var body: some View 
    Rectangle()
        .fill(Color.gray)
        .frame(width: 85, height: 175)
        .overlay(
            Circle()
              .stroke(Color.black,
                    style: StrokeStyle(
                         lineWidth: 2,
                         lineCap: .round,
                         lineJoin: .miter,
                         miterLimit: 0,
                         dash: [5, 10],
                         dashPhase: 0
                    ))
              .frame(width: 85, height: 85)
              .alignmentGuide(.top)  $0[VerticalAlignment.center]  // << this !!
        , alignment: .top)    // and this !!

【讨论】:

以上是关于SwiftUI 中的填充、偏移或位置的主要内容,如果未能解决你的问题,请参考以下文章

在 SwiftUI 中为 UITextView 设置初始视图偏移量

在动画偏移时动画删除/添加 SwiftUI 视图

如何摆脱 SwiftUI 中的垂直文本填充?

SwiftUI 获取 TextField 或任何视图的坐标

获取 SwiftUI ScrollView 的当前滚动位置

SwiftUI 中的一排 Picker ***,为啥拖动滚动区域从屏幕上的 Picker 控件偏移?