如何将第二个 HStack 视图居中?

时间:2021-04-12 06:36:44

标签: swiftui

我无法将第二个“日期”Text 置于 HStack 的中心。如您所见,在图像中,它更靠左一些。我只希望第二个视图以 HStack 为中心。我希望第一个视图被锁定到领先。

enter image description here

这是代码。

import SwiftUI

struct DaySummariesBarChart: View {

    var body: some View {
        HStack {
            Text("Date")
                .font(.footnote)
            Text("Date")
            Spacer()
        }
    }
}

struct BarChart_Previews: PreviewProvider {
    static var previews: some View {
        DaySummariesBarChart()
            .previewLayout(.sizeThatFits)
    }
}

3 个答案:

答案 0 :(得分:1)

这是一个非常干净的方法:

var body: some View {
  ZStack {
    Text("Date")
      .font(.footnote)
      .frame(maxWidth: .infinity, alignment: .leading)
    Text("Date")
   }
}

第一个 Text 的 maxWidth 为 infinity,因此它占据了整个空间,但与 .leading 对齐。

第二个 Text 默认在 ZStack 中居中。

enter image description here

答案 1 :(得分:0)

Spacer() 将视图向左移动。您的问题应该通过在另一侧添加另一个 Spacer() 来解决。

struct DaySummariesBarChart: View {
    var body: some View {
        HStack {
            Spacer()
            Text("Date")
                .font(.footnote)
            Text("Date")
            Spacer()
        }
    }
}

答案 2 :(得分:0)

您可以使用 GeometryReader 使视图的宽度正好减半,从而使第二个视图居中。

struct DaySummariesBarChart: View {
    var body: some View {
        GeometryReader { geometry in
            HStack {
                Text("Date")
                    .font(.footnote)
                    .frame(width: geometry.size.width / 2)
                Text("Date")
                    .frame(width: geometry.size.width / 2)
            }
        }
    }
}