SwiftUI:调整文本大小以适合按钮
SwiftUI: Resize text to fit button
我正在根据数据库中的值更新按钮文本,由于这些值可能很长或很短,我希望按钮大小保持不变,文本根据值的大小动态调整大小,所以它保留在按钮内而不被截断(值将是句子,它是一个语言学习应用程序)。我基本上想给字体大小一个最小可能值和一个最大可能值。
我知道如何在 Android Studio 中执行此操作。
autoSizeMinTextSize=14sp
autoSizeMaxTestSize=20sp
但是当我尝试使用带有 minimumScaleFactor 的大字体之类的建议时,它不起作用。它只会使文本变得非常小。
这是我的按钮样式。
struct SoundButton: ButtonStyle {
func makeBody(configuration: Self.Configuration) -> some View {
configuration.label
.foregroundColor(Color.black)
.multilineTextAlignment(.center)
.font(.custom("arial", size: 20))
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(configuration.isPressed ? LinearGradient(gradient: Gradient(colors: [Color("DarkestGreen"), Color("LightGreen")]), startPoint: .top, endPoint: .bottom):LinearGradient(gradient: Gradient(colors: [Color("DarkGreen"), Color("LightGreen")]), startPoint: .top, endPoint: .bottom))
.cornerRadius(10)
.shadow(radius: 3.0)
.overlay(
RoundedRectangle(cornerRadius: 10)
.stroke(Color.white, lineWidth:2))
.padding(2)
.scaleEffect(configuration.isPressed ? 0.975 : 1.0)
}
}
这是按钮代码。
Button(action: {
playSound(sound: "\(self.category)_audio1", type: "mp3")
self.translation = self.btns[1][1]
}) {
if(gotValues==true) {
Text("\(self.btns[1][0])")
} else {
Text("\(self.btn1)")
}
}
这是我的屏幕在应用程序中的样子。
我可以添加什么来达到预期的效果?谢谢。
此外,这是工作 android 版本。
据我了解您的目标,以下应该会给您带来所需的效果(或某种)...
测试 Xcode 11.4 / iOS 13.4
configuration.label
.padding(.horizontal, 8).lineLimit(1).minimumScaleFactor(0.4) // << this place !
.foregroundColor(Color.white)
我正在根据数据库中的值更新按钮文本,由于这些值可能很长或很短,我希望按钮大小保持不变,文本根据值的大小动态调整大小,所以它保留在按钮内而不被截断(值将是句子,它是一个语言学习应用程序)。我基本上想给字体大小一个最小可能值和一个最大可能值。
我知道如何在 Android Studio 中执行此操作。
autoSizeMinTextSize=14sp
autoSizeMaxTestSize=20sp
但是当我尝试使用带有 minimumScaleFactor 的大字体之类的建议时,它不起作用。它只会使文本变得非常小。
这是我的按钮样式。
struct SoundButton: ButtonStyle {
func makeBody(configuration: Self.Configuration) -> some View {
configuration.label
.foregroundColor(Color.black)
.multilineTextAlignment(.center)
.font(.custom("arial", size: 20))
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(configuration.isPressed ? LinearGradient(gradient: Gradient(colors: [Color("DarkestGreen"), Color("LightGreen")]), startPoint: .top, endPoint: .bottom):LinearGradient(gradient: Gradient(colors: [Color("DarkGreen"), Color("LightGreen")]), startPoint: .top, endPoint: .bottom))
.cornerRadius(10)
.shadow(radius: 3.0)
.overlay(
RoundedRectangle(cornerRadius: 10)
.stroke(Color.white, lineWidth:2))
.padding(2)
.scaleEffect(configuration.isPressed ? 0.975 : 1.0)
}
}
这是按钮代码。
Button(action: {
playSound(sound: "\(self.category)_audio1", type: "mp3")
self.translation = self.btns[1][1]
}) {
if(gotValues==true) {
Text("\(self.btns[1][0])")
} else {
Text("\(self.btn1)")
}
}
这是我的屏幕在应用程序中的样子。
我可以添加什么来达到预期的效果?谢谢。
此外,这是工作 android 版本。
据我了解您的目标,以下应该会给您带来所需的效果(或某种)...
测试 Xcode 11.4 / iOS 13.4
configuration.label
.padding(.horizontal, 8).lineLimit(1).minimumScaleFactor(0.4) // << this place !
.foregroundColor(Color.white)