Неожиданные изменения размера шрифта в iOS

#ios #fonts #display

#iOS #шрифты #отображение

Вопрос:

Все, что я новичок в iOS и SwiftUI (2 месяца). Я изо всех сил пытаюсь понять следующее поведение и надеюсь, что кто-нибудь сможет указать мне, как я могу диагностировать.

У меня есть этот код, успешно генерирующий это представление в поставщике предварительного просмотра

введите описание изображения здесь

однако, когда я запускаю его на устройстве или в симуляторе, шрифты меняются (это происходит и для системных образов), чтобы выглядеть более похожими на это (увеличено).

введите описание изображения здесь

Приведенный ниже вид отображается внутри очень общего tabview — я вообще не могу его понять и мог бы использовать некоторые рекомендации.

Спасибо

Крейг

     var body: some View {

        VStack(spacing: 0.0) {
            HStack(alignment: .top){
                Text(player.firstName)
                    .bold()
                Text(player.lastName)
                    .bold()
            }
            .font(.title)
            HStack {
                Image(uiImage: UIImage(data: player.playerPhoto) ?? UIImage())
                    .resizable()
                    .aspectRatio(contentMode: .fit)
                    .frame(width: /*@START_MENU_TOKEN@*/100/*@END_MENU_TOKEN@*/, height: 100)
                    .clipShape(Circle())
                    .overlay(Circle().stroke(Color.purple, lineWidth: 4.0))
                Spacer()
                VStack {
                    Text("lifetime averages")
                        .font(.body)
                        .foregroundColor(Color.gray)
                    HStack {
                        Spacer()
                        VStack {
                            Text("Batting")
                                .font(.title2)
                                .bold()
                            Text("(battingAverage, specifier: "%.3f")")
                        }
                        .padding(.leading)
                        if isPitcher {
                            Spacer()
                            VStack {
                                Text("ERA")
                                    .font(.title2)
                                    .bold()
                                Text("(earnedRunAverage, specifier: "%.2f")")
                            }
                            .padding(.trailing)
                            Spacer()
                        }
                    }
                }
                Spacer()
            }
            HStack {
                VStack {
                    Text("(noTeams)")
                        .font(.headline)
                    Text("teams")
                        .font(.subheadline)
                        .foregroundColor(Color.gray)
                }
                .padding(.leading, 10)
                Spacer()
                VStack {
                    Text("(noSeasons)")
                        .font(.headline)
                    Text("seasons")
                        .font(.subheadline)
                        .foregroundColor(Color.gray)
                }
                Spacer()
                VStack {
                    Text("(noGames)")
                        .font(.headline)
                    Text("games")
                        .font(.subheadline)
                        .foregroundColor(Color.gray)
                }.padding(.trailing, 10)

            }
            HStack{
                Spacer()
                Text("All Lifetime Stats >")
                    .font(.callout)
                    .foregroundColor(Color.blue)
            }
        }
        .frame(width: 350, height: 200, alignment: /*@START_MENU_TOKEN@*/.center/*@END_MENU_TOKEN@*/)
    }
 

Ответ №1:

В вашем коде не указано a .font(...) для этих двух Text элементов.

Возможно ли, что вы установили шрифт по умолчанию где-то в другом месте?

Я могу воспроизвести то, что вы получаете, делая это (используя PlayerView как отдельное представление, а не в таблице).

При использовании UIKit App Delegate в willConnectTo session :

     let contentView = PlayerView()
        .font(.largeTitle)
 

или, если вы используете SwiftUI App :

 @main
struct TestApp: App {
    var body: some Scene {
        WindowGroup {
            PlayerView()
                .font(.largeTitle)
        }
    }
}
 

Комментарии:

1. Действительно, спасибо — размещение .font(.body) в представлении вкладок, которое вызывало его, решило проблему. Я очень ценю инструкцию. Я кое-что узнал.