J'essaie d'inclure Dynamic Type avec une police personnalisée dans SwiftUI, et cette erreur continue d'être appelée lorsque j'essaie d'obtenir la sizeCategory
l'environnement.
J'ai essayé d'utiliser @Environment pour obtenir des objets autres que sizeCategory
, mais cela continue de sizeCategory
la même erreur.
J'utilise une modification du code de ce post StackOverflow, sur Xcode 11 beta 5. Cela semble fonctionner pour tout le monde là-bas, donc je ne comprends vraiment pas pourquoi cela ne fonctionne pas pour moi.
// // Fonts.swift // Team Study // // Created by Aditya Chugh on 2019-07-02. // Copyright © 2019 Aditya Chugh. All rights reserved. // import SwiftUI class Rawline { static let extraLight = "RawlineExtraLight-Regular" static let extraLightItalic = "RawlineExtraLight-Italic" static let light = "RawlineLight-Regular" static let lightItalic = "RawlineLight-Italic" static let thin = "RawlineThin-Regular" static let thinItalic = "Rawline-ThinItalic" static let regular = "Rawline-Regular" static let italic = "Rawline-Italic" static let medium = "RawlineMedium-Regular" static let mediumItalic = "RawlineMedium-Italic" static let semiBold = "RawlineSemiBold-Regular" static let semiBoldItalic = "RawlineSemiBold-Italic" static let bold = "Rawline-Bold" static let boldItalic = "Rawline-BoldItalic" static let extraBold = "RawlineExtraBold-Regular" static let extraBoldItalic = "RawlineExtraBold-Italic" static let black = "RawlineBlack-Regular" static let blackItalic = "RawlineBlack-Italic" } struct RawlineFont: ViewModifier { var textStyle: Font.TextStyle @Environment(\.sizeCategory) var sizeCategory : ContentSizeCategory init(_ textStyle: Font.TextStyle = .body) { self.textStyle = textStyle } func body(content: Content) -> some View { content.font(getFont()) } func getFont() -> Font { switch(self.sizeCategory) { case .extraSmall: return Font.custom("Rawline", size: 16 * getStyleFactor()) case .small: return Font.custom("Rawline", size: 21 * getStyleFactor()) case .medium: return Font.custom("Rawline", size: 24 * getStyleFactor()) case .large: return Font.custom("Rawline", size: 28 * getStyleFactor()) case .extraLarge: return Font.custom("Rawline", size: 32 * getStyleFactor()) case .extraExtraLarge: return Font.custom("Rawline", size: 36 * getStyleFactor()) case .extraExtraExtraLarge: return Font.custom("Rawline", size: 40 * getStyleFactor()) case .accessibilityMedium: return Font.custom("Rawline", size: 48 * getStyleFactor()) case .accessibilityLarge: return Font.custom("Rawline", size: 52 * getStyleFactor()) case .accessibilityExtraLarge: return Font.custom("Rawline", size: 60 * getStyleFactor()) case .accessibilityExtraExtraLarge: return Font.custom("Rawline", size: 66 * getStyleFactor()) case .accessibilityExtraExtraExtraLarge: return Font.custom("Rawline", size: 72 * getStyleFactor()) @unknown default: return Font.custom("Rawline", size: 36 * getStyleFactor()) } } func getStyleFactor() -> CGFloat { switch textStyle { case .caption: return 0.6 case .footnote: return 0.7 case .subheadline: return 0.8 case .callout: return 0.9 case .body: return 1.0 case .headline: return 1.2 case .title: return 1.5 case .largeTitle: return 2.0 @unknown default: return 1.0 } } }
Fichier de code complet:
struct RawlineFont: ViewModifier { var textStyle: Font.TextStyle @Environment(\.sizeCategory) var sizeCategory : ContentSizeCategory init(_ textStyle: Font.TextStyle = .body) { self.textStyle = textStyle } func body(content: Content) -> some View { content.font(getFont()) } func getFont() -> Font { switch(self.sizeCategory) { case .extraSmall: return Font.custom("Rawline", size: 16 * getStyleFactor()) case .small: return Font.custom("Rawline", size: 21 * getStyleFactor()) case .medium: return Font.custom("Rawline", size: 24 * getStyleFactor()) case .large: return Font.custom("Rawline", size: 28 * getStyleFactor()) case .extraLarge: return Font.custom("Rawline", size: 32 * getStyleFactor()) case .extraExtraLarge: return Font.custom("Rawline", size: 36 * getStyleFactor()) case .extraExtraExtraLarge: return Font.custom("Rawline", size: 40 * getStyleFactor()) case .accessibilityMedium: return Font.custom("Rawline", size: 48 * getStyleFactor()) case .accessibilityLarge: return Font.custom("Rawline", size: 52 * getStyleFactor()) case .accessibilityExtraLarge: return Font.custom("Rawline", size: 60 * getStyleFactor()) case .accessibilityExtraExtraLarge: return Font.custom("Rawline", size: 66 * getStyleFactor()) case .accessibilityExtraExtraExtraLarge: return Font.custom("Rawline", size: 72 * getStyleFactor()) @unknown default: return Font.custom("Rawline", size: 36 * getStyleFactor()) } } func getStyleFactor() -> CGFloat { switch textStyle { case .caption: return 0.6 case .footnote: return 0.7 case .subheadline: return 0.8 case .callout: return 0.9 case .body: return 1.0 case .headline: return 1.2 case .title: return 1.5 case .largeTitle: return 2.0 @unknown default: return 1.0 } } }
3 Réponses :
C'est moi qui ai répondu à la question à laquelle vous avez fait allusion. Je viens d'essayer le code que vous avez publié, avec la version bêta 5 et cela fonctionne bien. Cependant, notez qu'avec SwiftUI, vous pouvez obtenir des erreurs à certains endroits, lorsque le vrai défaut est ailleurs. Mon pari est que vous pouvez avoir des parenthèses déséquilibrées dans une autre partie de votre code. Ou cela pourrait être complètement autre chose. Vérifiez à nouveau, et si le problème persiste, veuillez publier votre code complet.
Je viens de vérifier l'ensemble de la base de code, et le problème persiste. Le fichier est trop long pour être placé dans un commentaire, alors dois-je simplement modifier la question d'origine?
Oui, vous pouvez modifier votre question d'origine pour inclure votre code complet.
Il compile très bien ici. Essayez de nettoyer, redémarrez Xcode, reconstruisez. J'ai vu des erreurs persistantes dans le passé qui venaient de disparaître en redémarrant Xcode. Si les problèmes persistent, essayez de créer un nouveau projet et de coller le code pour voir si vous voyez toujours l'erreur de compilation.
J'ai eu ce même message d'erreur. Il s'avère que j'avais défini un autre type nommé Environment que le compilateur récupérait.
cela fonctionne pour moi: @SwiftUI.Environment(\.colorScheme) var colorScheme : ColorScheme
J'espère que cela vous aide
si vous avez un autre objet dans votre application nommé Environment
, cela entrerait en SwiftUI
avec le mot clé d'environnement de SwiftUI
. changer le nom de votre objet Environment
personnalisé