首页 > 解决方案 > SwiftUI 文本不会扩展到多行

问题描述

我刚刚开始在零售版本中使用 SwiftUI。我无法让我的文本视图之一自动扩展为多行。我已经阅读了许多关于 SO 和 HackingWithSwift 的帖子,但无法让它发挥作用。我想也许它可能与我的其他框架有关,但我不知道从哪里开始

struct Message: View {
    var body: some View {
        ZStack() {
            Color.blue.cornerRadius(8)
            VStack(alignment: .leading, spacing: 8) {
                Text("Lorem Ipsum")
                    .foregroundColor(.white)
                    .bold()
                    .font(.system(size: 20))
                Text("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Donec enim diam vulputate ut pharetra. Sed turpis tincidunt id aliquet risus feugiat in. Interdum velit laoreet id donec ultrices tincidunt arcu non.  Lorem END")
                    .foregroundColor(.white)
                    .lineLimit(nil)
                Text("Sent to Group1 by iShaymus")
                    .foregroundColor(.white)
                    .italic()
                    .opacity(0.5)
                    .font(.system(size: 12))
            }
            .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: .topLeading)
            .padding(12)
        }
    }
}

我尝试将框架应用于Text(). 我试过添加.font(.body). 我试过设置.lineLimit(100)。他们都没有工作。输出始终如下:

iOS 截图

整个身体字符串明显更长:

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Donec enim diam vulputate ut pharetra. Sed turpis tincidunt id aliquet risus feugiat in. Interdum velit laoreet id donec ultrices tincidunt arcu non.  Lorem END

感谢 Marc,这是工作代码

import SwiftUI

struct Message: View {

    @State var title = ""
    @State var messageBody = ""
    @State var sentBy = ""
    @State var targetSite = ""

    var body: some View {
        VStack(alignment: .leading, spacing: 8) {
            Text(title)
                .foregroundColor(.white)
                .bold()
                .font(.system(size: 20))
            Text(messageBody)
                .foregroundColor(.white)
                .fixedSize(horizontal: false, vertical: true)
            Text("Sent to \(targetSite) by \(sentBy)")
                .foregroundColor(.white)
                .italic()
                .opacity(0.5)
                .font(.system(size: 12))
            }
            .frame(minWidth: 0, maxWidth: .infinity, alignment: .topLeading)
            .padding(12)
            .background(Color.blue)
            .cornerRadius(10)
    }
}

标签: iosswiftswiftuixcode11

解决方案


我想这就是你要找的。根据需要使用.fixedSize(horizontal: false, vertical: true)

struct Message: View {
    var body: some View {
        ZStack() {
            Color.blue.cornerRadius(8)
            VStack(alignment: .leading, spacing: 8) {
                Text("Lorem Ipsum")
                    .foregroundColor(.white)
                    .bold()
                    .font(.system(size: 20))
                Text("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Donec enim diam vulputate ut pharetra. Sed turpis tincidunt id aliquet risus feugiat in. Interdum velit laoreet id donec ultrices tincidunt arcu non.  Lorem END")
                    .foregroundColor(.white)
                      .fixedSize(horizontal: false, vertical: true)
                Text("Sent to Group1 by iShaymus")
                    .foregroundColor(.white)
                    .italic()
                    .opacity(0.5)
                    .font(.system(size: 12))
            }
         //   .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: .topLeading)
            .padding(12)
        }
          .fixedSize(horizontal: false, vertical: true)
    }
}

推荐阅读