在 Swiftui 的 Text() 中自动调整字体大小?
Posted
技术标签:
【中文标题】在 Swiftui 的 Text() 中自动调整字体大小?【英文标题】:Automatic adjust font size in Text() of Swiftui? 【发布时间】:2021-01-24 09:31:30 【问题描述】:是否可以根据要显示的文本长度自动调整字体大小?例如,通过设置帧大小。是否可以自动缩小字体大小,使显示字体的宽度保持不变?
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)
正如在我的代码中看到的,那里有一个很长的文本。文字在大部分设备上都可以完美显示,除了iPod Touch会因为太长而导致后面出现“xxxxxxxx xxxxxxxx xxxx ...”,“...”。无论如何它是否会自动跳转到下一行,或者缩小字体以便后面不会有“...”?
【问题讨论】:
【参考方案1】:使用minimumScaleFactor(_:)
https://developer.apple.com/documentation/swiftui/text/minimumscalefactor(_:)
struct ContentView: View
var body: some View
VStack
Text("Test string")
.minimumScaleFactor(0.1) //<--Here
.frame(width: 15, height: 15)
【讨论】:
我已包含我的代码并再次澄清我的问题。 @user6539552 是的,在字体之后使用这个 .minimumScaleFactor(0.1)。它会自动使它变成两行并更改字体大小。如果你给出高度,那么它将根据帧自动调整。我检查了你的代码,它被这个修复了。 我可以知道为什么我们选择因子为 0.1 吗? 这是一个最终缩小字体大小的最小比例。您可以根据自己的要求进行设置。我选择了非常小的帧大小作为示例。 我可以强制它变成多行而不是缩小文本吗?以上是关于在 Swiftui 的 Text() 中自动调整字体大小?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在 SwiftUI 中为 TextField 添加字距调整?
如何在 SwiftUI 中调整 navigationBarTitle 和 Label Text 对齐方式