具有 minimumscaleFactor 的 SwiftUI 文本始终减少文本

Posted

技术标签:

【中文标题】具有 minimumscaleFactor 的 SwiftUI 文本始终减少文本【英文标题】:SwiftUI Text With minimumscaleFactor Always Reducing Text 【发布时间】:2020-08-31 06:08:48 【问题描述】:

我遇到了一些用于小部件代码的 SwiftUI 问题。我想创建一个文本组件来缩小文本,但前提是它包含的文本不适合。但是,我看到它一直在缩小文本的比例。有谁知道我做错了什么?

 Text(verbatim: entry.records[0].value)
        .foregroundColor(.white)
        .font(Font.custom("SFCompactDisplay-Thin", size: 48))
        .minimumScaleFactor(0.75)
        .frame(minWidth: 100, idealWidth: 200, maxWidth: .infinity, minHeight: 48, idealHeight: 48, maxHeight: 48, alignment: .leading)
        .padding(.top, 0)
        .padding(.bottom, 12)
        .padding(.leading, 10)

【问题讨论】:

请更具体一些:哪些文本,在哪个布局,上下文等? 对不起,我应该更清楚。这适用于 ios 14 小部件 【参考方案1】:

您的效果是由于给定的.frame 限制。在你不希望文本被缩放然后不要限制它的框架,例如

Text(verbatim: "World")
        .foregroundColor(.white)
        .font(Font.custom("SFCompactDisplay-Thin", size: 48))
        .minimumScaleFactor(0.75)
        .frame(maxWidth: .infinity, alignment: .leading)     // << here !!

注意:48 大小的字体不等于屏幕上的 48 点。

【讨论】:

【参考方案2】:

运行您的代码后,运行看起来是正常的。 (图一、图二)

如果您仍有疑问,请删除 maxWidth: .infinity, 并查看。 (图3)

请告诉我最终结果是什么。 这是我的测试代码。

struct ContentView: View 
    var body: some View 
        Text(verbatim: "Hello world Hello world Hello world Hello world Hello world")
        .foregroundColor(.black)
        .font(Font.custom("SFCompactDisplay-Thin", size: 48))
        .minimumScaleFactor(0.5)
        .frame(minWidth: 100, idealWidth: 200, minHeight: 48, idealHeight: 48, maxHeight: 48, alignment: .leading)
        .padding(.top, 0)
        .padding(.bottom, 12)
        .padding(.leading, 10)
    


struct ContentView_Previews: PreviewProvider 
    static var previews: some View 
        ContentView()
    


更新 #1

您可以参考此代码以了解对齐问题。使用 HStack 进行布局。

    HStack 
        Text(verbatim: "Hello")
        .foregroundColor(.black)
        .font(Font.custom("SFCompactDisplay-Thin", size: 48))
        .minimumScaleFactor(0.1)
        .frame(minWidth: 10, idealWidth: 120, maxWidth: 120, minHeight: 48, idealHeight: 48, maxHeight: 48, alignment: .leading)
        .padding(.top, 0)
        .padding(.bottom, 12)
        .padding(.leading, 10)
        Spacer()
    

【讨论】:

所以我尝试删除 maxwidth: .infinity 并且默认文本大小仍然小于 48。此外,删除 maxwidth 最终导致文本不是 100% 左对齐。 你能提供一些更详细的布局信息吗?或者您可以专注于自己检查ideaWidthmaxWidth

以上是关于具有 minimumscaleFactor 的 SwiftUI 文本始终减少文本的主要内容,如果未能解决你的问题,请参考以下文章

UILabel 在设置 minimumScaleFactor 时获取当前比例因子?

SwiftUI:minimumScaleFactor 没有均匀地应用于堆栈元素

UILabel minimumScaleFactor 是如何工作的?

使用 minimumScaleFactor 时 UIButton titleLabel 未垂直居中

UIlabel的字体自适应属性

adjustsFontSizeToFitWidth 与 NSLineBreakByCharWrapping 无法共用