Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何将文本的字体大小从.largeTitle设置为.headline_Ios_Swift_Swiftui - Fatal编程技术网

Ios 如何将文本的字体大小从.largeTitle设置为.headline

Ios 如何将文本的字体大小从.largeTitle设置为.headline,ios,swift,swiftui,Ios,Swift,Swiftui,我有一个文本,我想在它出现时减小字体大小,从.largeTitle到.headline 以下是我目前正在尝试的内容(不起作用): struct MyView: View { @State private var fontSize: CGFloat = 100 var body: some View { GeometryReader { geometry in Text("Big Text - Small Text")

我有一个文本,我想在它出现时减小字体大小,从
.largeTitle到.headline

以下是我目前正在尝试的内容(不起作用):

struct MyView: View {
    @State private var fontSize: CGFloat = 100

    var body: some View {
        GeometryReader { geometry in
            Text("Big Text - Small Text")
                .font(.system(size: self.fontSize))
                .onAppear {
                    withAnimation(Animation.linear(duration: 10)) {
                        // what do I do here?
                 }
            }
        }
    }
}

默认情况下,字体大小不可设置动画。下面的解决方案基于自定义可设置动画的修改器

使用Xcode 12/iOS 14进行测试

struct AnimatingFontSize: AnimatableModifier {
    var fontSize: CGFloat

    var animatableData: CGFloat {
        get { fontSize }
        set { fontSize = newValue }
    }

    func body(content: Self.Content) -> some View {
        content
            .font(.system(size: self.fontSize))
    }
}

struct DemoFontView: View {
    @State private var smallFont = false

    var body: some View {
        Text("Big Text - Small Text")
            .frame(maxWidth: .infinity)
            .modifier(AnimatingFontSize(fontSize: smallFont ? 11 : 100))
            .animation(Animation.linear(duration: 10), value: smallFont)
            .onAppear {
                smallFont = true
            }
    }
}