Swiftui 垂直布局文字,使文字方向垂直

Swiftui 垂直布局文字,使文字方向垂直,swiftui,Swiftui,我想有一个垂直放置在图像顶部的文本,所以文本显示垂直。我已经编写了这样做的代码,但感觉像是黑客。我希望有人有更好的方法来做这件事。我的代码: import SwiftUI struct VerticalText: View { let input = "12.4" let myFont = Font.system(size: 22.0).bold() var body: some View { ZStack { Rectangle().

我想有一个垂直放置在图像顶部的文本,所以文本显示垂直。我已经编写了这样做的代码,但感觉像是黑客。我希望有人有更好的方法来做这件事。我的代码:

import SwiftUI

struct VerticalText: View {
  let input = "12.4"
  let myFont = Font.system(size: 22.0).bold()
  
  var body: some View {
    ZStack {
      Rectangle().fill(Color.yellow).frame(width: 100, height: 100, alignment: .center)
      getText()
    }
  }
  
  func getText() -> some View {
    let chars = input.map { String($0) }
    return VStack {
      ForEach(chars, id: \.self) { char in
        if char == "." {
          Text(char)
            .font(myFont)
            .frame(width: .infinity, height: 2, alignment: .center)
            .offset(x: 0.0, y: -6.0)
        }else {
          Text(char)
            .font(myFont)
        }
      }
    }
  }
}

struct VerticalText_Previews: PreviewProvider {
    static var previews: some View {
        VerticalText()
    }
}

一些注意事项:

  • 为了回答这个问题,我用一个矩形替换了图像,并将输入简化为一个常量
  • 输入将是一个介于0和100之间的数字。可以选择最多两位小数
  • 当输入为十进制数时,“.”的if块用于收紧间距。如果没有它,结果看起来像:

在上图中,2和小数之间有一个相当大的间隙。我想缩小那个空间。为此,我将帧大小设置为十进制。这导致:


然而,上面的代码感觉像是黑客攻击。偏移量是硬编码的,if语句感觉不正确。有没有更好的垂直布局文本的方法?

我认为SwiftUI中没有一种本地方法可以做到这一点。我会坚持使用您的解决方案,但可能会建议使用.padding(.bottom,3)代替偏移量。好的,我将尝试使用padding代替。谢谢你@nicksarno