首页 > 解决方案 > SwiftUI:旋转后文本没有屏幕的全宽

问题描述

该应用程序仅支持肖像模式。应该显示两个问题,但它们会相应地轮换。所以玩家可以很好地看到问题,无论他们坐在哪里。

无论如何,似乎边界框在旋转时没有旋转。

ZStack {
        HStack {
            GeometryReader { proxy in
                Text(challenge)
                    .rotationEffect(Angle(degrees: 90), anchor: .center)
                    .frame(maxWidth: proxy.size.height, minHeight: proxy.size.width)
                    .foregroundColor(.red)
                    .font(.largeTitle)
                    .background(Color.blue)
            }
            Spacer()
            GeometryReader { proxy in
                Text(challenge)
                    .rotationEffect(Angle(degrees: 270), anchor: .center)
                    .frame(maxWidth: proxy.size.height, minHeight: proxy.size.width)
                    .foregroundColor(.red)
                    .font(.largeTitle)
                    .background(Color.blue)
            }
        }
    }

我尝试了很多不同的东西。我省略了GeometryReader并使用了“fixedSize()”。然后我得到一个穿过屏幕的单行。

我也尝试过这个解决方案,但它没有按预期工作。

我的结果始终是不使用全宽的文本。(重叠只是另一个错误,但我一定会控制住它)。

在此处输入图像描述

我真正想要的: 在此处输入图像描述

标签: swiftui

解决方案


这是一个可能的方法的演示。使用 Xcode 12.1 / iOS 14.1 准备

演示

struct DemoView: View {
    var body: some View {
        HStack {
            RotatedText(text: lorem, angle: Angle(degrees: 90))
            RotatedText(text: lorem, angle: Angle(degrees: -90))
        }
    }
}

struct RotatedText: View {
    let text: String
    let angle: Angle
    var color: Color = .blue
    
    var body: some View {
        color.overlay(
            GeometryReader { gp in
                VStack {
                    Text(text)
                        .frame(width: gp.size.height, height: gp.size.width)
                        .rotationEffect(angle)
                }.frame(width: gp.size.width, height: gp.size.height)
            }
        )
    }
}

推荐阅读