【问题标题】:SwiftUI Text With minimumscaleFactor Always Reducing Text具有 minimumscaleFactor 的 SwiftUI 文本始终减少文本
【发布时间】: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 小部件

标签: ios swift swiftui ios14


【解决方案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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-12
    • 2013-08-11
    • 2013-05-21
    • 1970-01-01
    • 2011-07-20
    • 2010-12-10
    相关资源
    最近更新 更多