【问题标题】:Position a view relative to its top left corner instead of center相对于其左上角而不是中心定位视图
【发布时间】:2021-06-03 03:16:40
【问题描述】:

我刚刚遇到了问题,我想使用左上角将文本定位在我的视图中。这是因为我使用 SVG 文件作为输入,其中的位置是以这种方式给出的。在 SwiftUI 中,.position(x: 10.0, y: 10.0) 确实定位了视图的中心。所以结果是我的文本有一个偏移量,我一般无法删除,因为在我得到它之前我不知道文本的长度。编写代码,可以使用文本长度、字体和大小(也许更多)来计算偏移量,这真的不是我愿意研究的解决方案。

所以这是不可能的,因为文本以 (0,0) 为中心并且一半在视图之外:

Text("I am a dummy")
    .position(x: 0.0, y: 0.0)

当我希望文本位于 0 和 0 以外的其他随机位置时,使用基本分隔符的解决方案不起作用。

Text("I am a dummy")
Spacer()

我还没有在这里找到另一个帖子,其中给出了该特定问题的解决方案。

【问题讨论】:

  • 对我来说.position(x: 0.0, y: 0.0) 工作...你能显示你想要的结果的图像吗?
  • 添加了它对 (0,0) 的作用的图像。文本一半在视图之外,但我希望它的左上角从 (0,0) 开始。到目前为止,它只适用于答案中的选项。
  • 好吧,如果我希望它适用于所有 x 和 y,也就是说,如果我希望 (0,0) 作为左上角,我也可以只使用普通垫片。问题是:我的答案适用于我设置的所有位置,但这肯定不是一个漂亮的解决方案。

标签: swift swiftui


【解决方案1】:

我最终得到的是一个相当大的解决方法,它应该适用于从左上角定义的所有 x 和 y 位置:

VStack {
    Spacer(minLength: pos.x)
    HStack {
        Spacer(minLength: pos.x)
        Text("I am a dummy")
        Spacer()
            .frame(idealWidth: 10000)
    }
    Spacer()
        .frame(idealHeight: 10000)
}

所以我所做的就是将我的 Text 设置在 VStackHStack 中,并且对于每个堆栈,我在文本的两侧都设置了 Spacer()。这将把它放在中间。所以为了解决这个问题,我为顶部和左侧的垫片设置了最小长度,我们的位置应该是每个值(这里是pos.xpos.y)。现在我们只需要确保其他垫片占用他们可以获得的所有空间,以便具有最小长度的垫片实际上只能获得最小长度。为此,我们给其他垫片一个frame 和一个荒谬的idealWidthidealHeight,这取决于它是什么。现在我的文本的左上角位于pos 定义的位置。

我仅在 iPad Pro 上对此进行了测试,但它应该适用于 iOS 和 macOS,因为 SwiftUI 使用点并且没有屏幕具有 10000 点的宽度或高度(我至少不知道,否则值可以添加一个零和它的罚款)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-28
    • 2017-11-30
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多