3
votes

La police personnalisée dans Swift 4 provoque une erreur fatale: trouvé nul de manière inattendue lors du déballage d'une valeur facultative

Je dois ajouter une police personnalisée à mon application. J'ai ajouté des polices à mon projet et répertorié la liste d'informations.

self.headTitle.font = UIFont.Proxima.regular.font(size: 30)

Erreur fatale: trouvé nul de manière inattendue lors du déballage d'une valeur facultative lors de l'appel

 enum Proxima: String {
        case regular = "Regular"
        func font(size: CGFloat) -> UIFont {
            return UIFont(name: "Proxima-\(rawValue)", size: size)!
        }
    }


6 Réponses :


1
votes

7 commentaires

J'ai déjà vérifié la cible mais cela ne fonctionne pas. J'obtiens toujours la même erreur.


@Daliyachacko Essayez d'imprimer UIFont.familyNames assurez-vous d'avoir le nom exact


@Daliyachacko Pouvez-vous voir la police en utilisant la méthode ci-dessus?


UIFont.familyNames ne répertorie pas ma police.


@Daliyachacko pourriez-vous s'il vous plaît poster une capture d'écran du fichier info.plist


J'ai ajouté l'image de info.plist. vérifie ça


@Daliyachacko ça a l'air bien. assurez-vous que vous n'avez pas d'espace supplémentaire, s'il est possible de partager un exemple de code?. Ou essayez d'autres polices et vérifiez que cela fonctionne ou non



0
votes

Essayez ces

  • Ajoutez des fichiers personnalisés dans votre projet et vérifiez également dans Copier la ressource de l'ensemble en phase de construction

  • En utilisant cette fonction, vous pouvez vérifier les polices disponibles dans votre projet. ajoutez cette fonction dans appDelegate et appelez-la depuis didFinsihLaunching.

    func printFonts() {
      let fontFamilyNames = UIFont.familyNames
      for familyName in fontFamilyNames {
          print("------------------------------")
          print("Font Family Name = [\(familyName)]")
          let names = UIFont.fontNames(forFamilyName: familyName)
          print("Font Names = [\(names)]")
        }
      }
    
  • Si votre police personnalisée est disponible dans la liste des polices imprimées, vous pouvez l'utiliser.


4 commentaires

La police personnalisée ne figure pas dans la liste. Mais je vérifie les ressources du bundle et la police est là. J'ai mis à jour la question, pouvez-vous la vérifier.


Avez-vous vérifié avec la fonction printFonts? votre police y est disponible.


J'avais vérifié avec la même police. et je suis capable d'utiliser cette police. ------------------------------ Nom de la famille de polices = [Proxima Nova] Noms de polices = [["ProximaNova-Regular "]] ------------------------------


J'utilise un nouveau fichier de police Proxima-Regular.



1
votes

Supprimez Regular pour la police car iOS utilise une police par défaut en tant que police standard, essayez de modifier le code de votre code et cela fonctionne bien après cela.

Ex:

@IBOutlet weak var label1: UILabel!
enum OpenSans: String {
    case regular = ""
    case semiBold = "-Semibold"
    func font(size: CGFloat) -> UIFont {
        return UIFont(name: "OpenSans\(rawValue)", size: size)!
    }
}

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib..

    label1.font = OpenSans.regular.font(size: 30.0)

    label1.font = OpenSans.semiBold.font(size: 30.0)
}

Si vous êtes toujours avez un problème Veuillez vous référer à ce projet de démonstration

FontDemo a >

J'espère que cela vous aidera.


0 commentaires

0
votes

Exécutez le code suivant pour vérifier la police disponible dans votre projet.

for fontFamilyName in UIFont.familyNames{
    for fontName in UIFont.fontNames(forFamilyName: fontFamilyName){
        print("Family: \(fontFamilyName)     Font: \(fontName)") 
    }
}

Voir la sortie dans votre console, toutes les polices disponibles sont imprimées ici, vérifiez le nom de police réel de vos polices fournies.

Et utilisez ce nom de police pour UIFont (nom: "FontName", taille: 15)


0 commentaires

3
votes

Assurez-vous que vos fichiers sont ajoutés à votre cible

N'oubliez pas non plus de les ajouter dans la section "Police fournie par l'application" de Info.plist


0 commentaires

0
votes

Xcode 11.1, iOS 13.1

J'ai tout fait correctement, mais une police personnalisée manquait dans la liste des polices (via UIFont.fontNames (forFamilyName: fontFamilyName) ).

Ensuite, j'ai réorganisé la police manquante dans Info.plist (polices fournies par l'application) à l'avant et cela a fonctionné, oui.

Peut-être que cela aide quelqu'un.


0 commentaires