SwiftUI 的 Text() 自动调整字体大小?

use*_*552 7 swiftui

有没有办法根据要显示的文字长度自动调整字体大小?例如,通过设置帧大小?能否自动缩小字体大小,使显示字体的宽度保持不变?

var body: some View {
    
    VStack {
        ZStack {
            GeometryReader { g in
                ZStack {
                    
                    ScrollView(.vertical, showsIndicators: true, content: {
                    VStack {
                        ZStack {
                            VStack {
                                Image("cat")
                                    .resizable()
                                    .aspectRatio(contentMode: .fill)
                                    .frame(width:g.size.width, height:g.size.height/4*3)
                                    .clipped(antialiased:true)
                                    .shadow(radius:25, x:0, y:0)
                                
                                VStack (){
                                    HStack {
                                        VStack (alignment: .leading) {
                                            HStack {
                                                Text("XXXX").font(.title)
                                               
                                                        .font(.system(size:35)).foregroundColor(.black).shadow(radius: 5)
                                                })
                                                Spacer()
                                                

                                            }
                                            HStack {
                                                Text("xxxxxxxxxxxxx xxxxxxxxxxx xxxxxxxxxx ").font(.title2) // very long text here
                                                Spacer()
                                            }
                                        }
                                    }
                                    
                                }
                                .padding()
                                .frame(width:g.size.width, height:g.size.height/4*1, alignment: .top)
                            }
                        }.frame(width: g.size.width, height: g.size.height, alignment: .top)
                        

            }
            .edgesIgnoringSafeArea(.all)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

正如您在我的代码中看到的,那里有一个很长的文本。文字在大多数设备上都可以完美显示,但 iPod Touch 会因为太长而无法显示,最后会显示为“xxxxxxxx xxxxxxxx xxxx ...”、“...”。有什么方法可以自动跳转到下一行,或者缩小字体,这样末尾就不会出现“...”?

Raj*_*han 7

使用minimumScaleFactor(_:)

struct ContentView: View {
    var body: some View {
        VStack{
            Text("Test string")
                .minimumScaleFactor(0.1) // <-- Here
                .frame(width: 15, height: 15)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)