【问题标题】:how do you align text to the top of screen in SwiftUI如何在 SwiftUI 中将文本与屏幕顶部对齐
【发布时间】:2020-01-19 02:25:29
【问题描述】:

我正在尝试将“顶部文本”对齐到屏幕顶部,但找不到方法。 “Top Text”需要对齐iphone屏幕的“notch”附近。

我附上了“顶部文本”当前位置的屏幕截图,需要移到顶部

struct ContentView: View {
    //var newColor : [String: Double] = setColor(red:247, green:186, blue:161)
    var body: some View {
        ZStack {
            VStack(spacing: 0) {
                HStack {
                    Text("Top Text[![enter image description here][1]][1]")
                        .fontWeight(.light)
                        .multilineTextAlignment(.center)
                        .frame(minWidth: 0, maxWidth: .infinity, minHeight: 100)
                        .font(.body)
                        .padding()

                }
                .offset(y: 0)
                .frame(minWidth: 0, maxHeight: 400, alignment: .topLeading)

                VStack {
                    Text("Sign in with Facebook")
                        .fontWeight(.light)
                        .font(.title)
                        .frame(minWidth: 0, maxWidth: .infinity, maxHeight: 50)
                        .padding(EdgeInsets.init(top: 0, leading: 0, bottom: 0, trailing: 0))

                    Text("Sign in with Google")
                        .fontWeight(.light)
                        .font(.title)
                        .padding()
                        .frame(minWidth: 0, maxWidth: .infinity, maxHeight: 50)
                }
            }
            .foregroundColor(Color.black.opacity(0.7))
            .padding()
            .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: .leading)
            .offset(x: 0, y: 0)

        }
        .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: .leading)
        .background(Color.orange.opacity(0.2))
        .edgesIgnoringSafeArea(.all)

    }

}

【问题讨论】:

    标签: swift swiftui


    【解决方案1】:

    您可以在HStackVStack 之间添加一个Spacer()。不过,这会将其他文本推到底部。您可以在底部的Texts 之后再添加一个Spacer() 以将它们向上推。

    这里是基本相同的视图,代码更少:

    var body: some View {
        ZStack {
            Color(.orange).opacity(0.2).edgesIgnoringSafeArea(.all)
    
            VStack(spacing: 10) {
                Text("Top Text[![enter image description here][1]][1]")
                    .fontWeight(.light)
                    .multilineTextAlignment(.center)
                    .font(.body)
                    .padding()
                Spacer()
                Text("Sign in with Facebook")
                    .fontWeight(.light)
                    .font(.title)
                Text("Sign in with Google")
                    .fontWeight(.light)
                    .font(.title)
                Spacer()
            }
            .foregroundColor(Color.black.opacity(0.7))
            .padding()
        }
    }
    

    【讨论】:

      【解决方案2】:

      这是可能的方法

      var body: some View {
          ZStack(alignment: .top) { // << made explicit alignment to top
              HStack { // << moved this up to ZStack 
                  Text("Top Text")
                      .fontWeight(.light)
                      .multilineTextAlignment(.center)
                      .frame(minWidth: 0, maxWidth: .infinity, minHeight: 100)
                      .font(.body)
              }
              .frame(minWidth: 0, maxHeight: 400, alignment: .topLeading)
              VStack(spacing: 0) {
      
                  VStack {
                      Text("Sign in with Facebook")
                          .fontWeight(.light)
                          .font(.title)
                          .frame(minWidth: 0, maxWidth: .infinity, maxHeight: 50)
                          .padding(EdgeInsets.init(top: 0, leading: 0, bottom: 0, trailing: 0))
      
                      Text("Sign in with Google")
                          .fontWeight(.light)
                          .font(.title)
                          .padding()
                          .frame(minWidth: 0, maxWidth: .infinity, maxHeight: 50)
                  }
              }
              .foregroundColor(Color.black.opacity(0.7))
              .padding()
              .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: .leading)
              .offset(x: 0, y: 0)
      
          }
          .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: .leading)
          .background(Color.orange.opacity(0.2))
          .edgesIgnoringSafeArea(.all)
      
      }
      

      【讨论】:

      • 感谢@Asperi!你改变了什么?你能强调一下吗?
      猜你喜欢
      • 1970-01-01
      • 2021-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多