Button SwiftUI:调整文本大小以适应按钮

Button SwiftUI:调整文本大小以适应按钮,button,text,styles,swiftui,Button,Text,Styles,Swiftui,我正在根据数据库中的值更新按钮文本,由于这些值可能很长或很短,我希望按钮大小保持不变,文本根据值的大小动态调整大小,因此它保留在按钮内,而不是被截断(值将是句子,这是一个语言学习应用程序)。我基本上想给字体大小一个最小可能值和一个最大可能值 我知道如何在Android Studio中做到这一点 autoSizeMinTextSize=14sp autoSizeMaxTestSize=20sp 但当我尝试使用大字体和minimumScaleFactor这样的建议时,它不起作用。它只是让文本变得难

我正在根据数据库中的值更新按钮文本,由于这些值可能很长或很短,我希望按钮大小保持不变,文本根据值的大小动态调整大小,因此它保留在按钮内,而不是被截断(值将是句子,这是一个语言学习应用程序)。我基本上想给字体大小一个最小可能值和一个最大可能值

我知道如何在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)//但您无论如何都不限制按钮大小?
.frame(maxWidth:.infinity,maxHeight:.infinity)
允许无限制地对其进行增长。那么?我有16个按钮。我希望他们在他们的父视图中平均划分屏幕。它们相互制约。我试过了,但线条很小,无法填满按钮。每个按钮上的字体大小也是相同的。我在我的原始帖子中添加了一个android版本的屏幕截图。如果你需要包装文本(这并不明显),只需删除建议答案中的
.lineLimit
修饰符。如果我删除行限制并将scalefactor更改为0.8,它看起来更像android版本,但仍然不会改变按钮之间文本的大小。所有按钮的字体大小都相同。minimumScaleFactor似乎只是表示比例因子。如果我把字体大小改为16,看起来完全一样。但是在屏幕截图中,字体大小正在改变。也许我做错了什么。SwiftUI没有像
autoSizeMinTextSize
这样的东西,至少现在是这样,如果可以预料的话。你可以向苹果提交反馈意见和建议。关于
minimumScaleFactor
——这里是doc允许的缩小字体大小以适应可用空间的最小比例,因此它不是一种“常规比例”,它会改变字体大小。是的,它只是在不需要的时候缩小字体大小。但是你的允许字体大小不同。configuration.label中还有什么?