首页 > 解决方案 > 无法在警报 SwiftUI 中格式化文本

问题描述

我想在 SwiftUI 的警报中修改文本的字体大小和颜色。添加修饰符似乎不起作用。我必须在这里遗漏一些简单的东西。我创建了最基本的警报屏幕,添加了文本修饰符,它们被忽略了。我创建了自己的视图来显示我想要的结果。显然,既然我可以做我想要的,我可以走那条路,尽管它需要做很多工作,而且看起来内置警报应该能够做到这一点。

struct ContentView: View {
    @State private var showAlert = false
    @State private var showMyAlert = false
    var body: some View {
        GeometryReader { geo in
            ZStack {
                VStack {
                    Text("Make Some Font Business")
                        .font(.title)
                        .foregroundColor(.red)

                    Button(action: {
                        self.showAlert.toggle()
                    }) {
                        Text("Toggle System Alert")
                    }

                    Button(action: {
                        self.showMyAlert.toggle()
                    }) {
                        Text("Show MyAlert")
                    }
                }
                if self.showMyAlert {
                    MyAlert(showMyAlert: self.$showMyAlert)
                        .animation(.easeInOut)
                }

            }//vstack

                .frame(width: geo.size.width, height: geo.size.height)
                .background(self.showMyAlert ? Color.gray.opacity(0.2) : Color.white)

                .alert(isPresented: self.$showAlert) {
                    Alert(title: Text("Important"),
                          message: Text("This text should be large and it should be green")
                            .font(.system(size: 36))
                            .foregroundColor(.green),
                          dismissButton: .default(Text("Ok")))
            }//.alert
        }//geo
        .edgesIgnoringSafeArea(.all)
    }
}

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

struct MyAlert: View {  
    @Binding var showMyAlert: Bool  
    var body: some View {
        ZStack {
            RoundedRectangle(cornerRadius: 20)
                .frame(width: 275, height: 180, alignment: .center)
                .foregroundColor(.white).opacity(1.0)
            VStack {
                Text("Important")
                    //.fontWeight(.bold)
                    .font(.system(size: 20))
                Divider()
                Text("This text should be large and it should be green")
                    .font(.system(size: 20))
                    .foregroundColor(.green)
                    .multilineTextAlignment(.center)
                Divider()
                Button(action: {
                    self.showMyAlert.toggle()
                } ) {
                    Text("Ok")
                        .foregroundColor(.blue)
                        .font(.system(size: 20))
                }
            }//vstack
            .frame(width: 225, height: 150, alignment: .center)
        }//zstack
    }
}

任何指导将不胜感激。

Xcode 11.3.1 (11C504)

标签: iosxcodeswiftuialert

解决方案


据我所知,修饰符不适用于 SwiftUI 中的内置警报。这是在默认警报视图上显示的标准系统字体和大小,并且不能像 UIKit 默认警报那样更改。我认为最好的方法是实现自定义修饰符来显示自定义警报


推荐阅读