6 votes

Le titre de ma barre de navigation est trop large. Comment corriger cela ?

J'utilise le contrôleur de navigation, et j'ai fixé à true la valeur de l'attribut prefersLargeTitle propriété. Tout fonctionne bien, mais lorsque le texte de mon titre devient trop grand, il ne tient pas dans l'espace. Voici ce que cela donne :

enter image description here

Est-il possible de faire en sorte que le titre (alors que la barre de navigation est en anglais) soit en anglais ? prefersLargeTitle est fixée à true) ajuste dynamiquement sa taille de police, et si c'est le cas, comment y parvenir ?

15voto

vicente.fava Points 240

Voici la solution que j'ai trouvée

override func viewDidLoad() {
  super.viewDidLoad()

  title = yourTitle
  adjustLargeTitleSize()
}

extension UIViewController {
  func adjustLargeTitleSize() {
    guard let title = title, #available(iOS 11.0, *) else { return }

    let maxWidth = UIScreen.main.bounds.size.width - 60
    var fontSize = UIFont.preferredFont(forTextStyle: .largeTitle).pointSize
    var width = title.size(withAttributes: [NSAttributedStringKey.font: UIFont.systemFont(ofSize: fontSize)]).width

    while width > maxWidth {
      fontSize -= 1
      width = title.size(withAttributes: [NSAttributedStringKey.font: UIFont.systemFont(ofSize: fontSize)]).width
    }

    navigationController?.navigationBar.largeTitleTextAttributes =
        [NSAttributedStringKey.font: UIFont.boldSystemFont(ofSize: fontSize)
    ]
  }
}

3voto

casperson Points 83

Cette question trouve ici une certaine réponse : Comment redimensionner dynamiquement les titres d'une barre de navigation ? .

self.title = "Your TiTle Text"
let tlabel = UILabel(frame: CGRectMake(0, 0, 200, 40))
tlabel.text = self.title
tlabel.textColor = UIColor.whiteColor()
tlabel.font = UIFont(name: "Helvetica-Bold", size: 30.0)
tlabel.backgroundColor = UIColor.clearColor()
tlabel.adjustsFontSizeToFitWidth = true
self.navigationItem.titleView = tlabel

Ceci étant dit, cette situation est légèrement différente, dans la mesure où la propriété prefersLargeTitle est définie. Je ne sais pas si la propriété tlabel.adjustsFontSizeToFitWidth = true remplace l'option prefersLargeTitle mais essayez-le et voyez si cela fonctionne. Vous trouverez également des informations supplémentaires concernant les titres des éléments de navigation ici : https://developer.apple.com/documentation/uikit/uinavigationitem/2909056-largetitledisplaymode . J'espère que cela vous aidera.

0voto

Yitzchak Points 1374

Est-il possible de l'utiliser d'une manière ou d'une autre ?

enter image description here

Elle n'est valable que dans l'Interface Builder, mais vous pouvez l'utiliser en cours d'exécution.

Autoshrink

Détermine si l'étiquette ajuste l'apparence du texte avant de recourir à la troncature. Sélectionnez Échelle de police minimale et entrez une valeur pour permettre à l'étiquette de réduire la taille de la police pour l'adapter au texte. Activez l'option Resserrer l'espacement des lettres pour permettre à l'étiquette de réduire l'espacement entre les caractères. Vous pouvez accéder à ces valeurs au moment de l'exécution à l'aide de la commande minimumScaleFactor y allowsDefaultTighteningForTruncation respectivement. Notez que l'option Taille de police minimale a été supprimée dans iOS 6.

lien source

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X