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

Posted

技术标签:

【中文标题】SwiftUI:minimumScaleFactor 没有均匀地应用于堆栈元素【英文标题】:SwiftUI: minimumScaleFactor not applying evenly to stack elements 【发布时间】:2019-09-07 05:07:10 【问题描述】:

我有两个文本的水平堆栈(第二个以蓝色突出显示)。它适合 iPhone XR,但在较小的设备(如 iPhone X)上,文本不适合。我试图通过使用 minimumScaleFactor 来缩放文本来解决这个问题。然而,SwiftUI 似乎会决定在堆栈中扩展什么。在此示例中,在较小的设备上,它删除了粗体并仅缩小了第一个(非蓝色)元素。蓝色元素保持不变。关于为什么会发生这种情况的任何想法?如何将两个粗体文本元素一起缩小?谢谢!

    var normalText: String
    var highlightedText: String

    var body: some View 
        HStack() 
            Text(normalText)
                .font(.largeTitle)
                .bold()
                .lineLimit(1)

            Text(highlightedText)
                .font(.largeTitle)
                .bold()
                .lineLimit(1)
                .foregroundColor(.blue)

            Spacer()
        
        .minimumScaleFactor(0.5)
    

这是它在较小设备上的显示方式: 以及它如何在更大的设备上显示:

【问题讨论】:

【参考方案1】:

struct ContentView: View 
    var normalText: String = "Hello and Welcome to Stack "
    var highlightedText: String = "Overflow"

    var body: some View 
        HStack() 
            Group 
                Text(normalText).bold() +
                Text(highlightedText).bold()
                .foregroundColor(.blue)
            
            .lineLimit(1).font(.largeTitle)

            Spacer()
        
        .minimumScaleFactor(0.5)
    


+ 是为 2 个文本而不是 2 个视图定义的,并且 lineLimit() 返回一个视图,需要对连接的文本进行分组。我将组合的字符串加长以强制其收缩。

【讨论】:

感谢您的回复!分组似乎确实允许文本一起缩小,这很棒,但现在整个文本都没有加粗。我正在玩它,但有什么想法吗? 重要的是+。该集团只是解决了 lineLimit() 的问题。至于bold(),我觉得你可以用font()来做点什么。 哦,好吧,这是有道理的。我不太确定你对字体()的意思。它已被定义为 .largeTitle,但粗体不适用。你能澄清一下你的意思吗? font 需要一个字体?不仅仅是 .largeTitle 等预定义的之一,因此您可以使用 Font.largeTitle.bold() 或类似的东西。 谢谢,但这实际上不起作用。我尝试了一些没有运气的事情。不确定这是一个错误还是我只是错过了一些东西......

以上是关于SwiftUI:minimumScaleFactor 没有均匀地应用于堆栈元素的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 学习曲线

SwiftUI NavigationLink 如何到达另一个 SwiftUI 页面?

SwiftUI - 如何在 SwiftUI 中弹出到特定视图?

SwiftUI3.0将UIKit ViewController转化成 swiftUI的view

SwiftUI 五

SwiftUI/UIKit 如何将 SwiftUI 字体转换为 UIKit UIFont?