1
votes

Comment utiliser le type dynamique dans TextView dans la cellule de vue tableau

Je souhaite implémenter Dynamic Type dans mon application, afin que l'application puisse s'adapter aux préférences de police de l'utilisateur. J'ai une vue de tableau avec 3 cellules statiques. Le premier et le second ont UITextField et ils fonctionnent très bien sans aucun problème. Le troisième qui est une cellule avec UITextView ne se met pas à l'échelle. Le type dynamique est activé et la police est Body.

Voici mon code dans mon UITableViewController.

 override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableView.automaticDimension
}

et UITableView délégué

override func viewDidLoad() {
    super.viewDidLoad()

    tableView.rowHeight = UITableView.automaticDimension
    tableView.estimatedRowHeight = 100 
    setupTextFieldsAndTextView()
}

func setupTextFieldsAndTextView() {
    emailTF.keyboardType = UIKeyboardType.asciiCapable
    titleTF.keyboardType = UIKeyboardType.asciiCapable
    messageTextView.keyboardType = UIKeyboardType.asciiCapable

    emailTF.returnKeyType = .next
    titleTF.returnKeyType = .next
    messageTextView.returnKeyType = .default

    emailTF.delegate = self
    titleTF.delegate = self
    messageTextView.delegate = self
}

Je souhaite avoir le même design que dans l'application de calendrier iOS. Échelle de cellule basée sur le type de police choisi, mais UITextView est toujours défilable et le texte à l'intérieur est également choisi par l'utilisateur. UITextView dans l'écran est une cellule avec un espace réservé de texte "Notes". calendrier ios 1

calendrier ios 2


5 commentaires

stackoverflow.com/questions/43398867/… < / a>


stackoverflow.com/questions/37014919/...


@ShadeToD: lorsque vous prétendez que la cellule avec UITextView ne se met pas à l'échelle avec le type dynamique, parlez-vous de la hauteur ou de la taille de la police?


@ XLE_22 je veux dire la hauteur de la cellule et la police du texte à l'intérieur de cette cellule. Découvrez 2 photos de l'application de calendrier iOS. Il met à l'échelle la hauteur de la cellule et le texte à l'intérieur de la cellule. (cellule avec espace réservé "Notes")


Vous pouvez essayer votre cellule de visualisation de texte, écouter UIContentSizeCategory.didChangeNotification , puis actualiser votre vue de texte?


3 Réponses :


-1
votes

Utilisez GrowingTextView , pour UITextView


2 commentaires

Je veux avoir le même design que dans l'application de calendrier iOS. À l'intérieur de cette application, la vue de texte qui se trouve à l'intérieur de la cellule ne se développe pas lorsque vous tapez du texte.


Bonjour @ShadeToD, j'ai rencontré le même problème, donc j'utilise GrowingTextview à l'intérieur de la cellule. Veuillez vérifier mon écran: prntscr.com/ndjahg



0
votes

Quelques étapes à vérifier pour UITextView :

  • Il doit être dans votre cellule.
  • Ses contraintes doivent être définies avec la cellule.
  • Son style de texte DOIT être sélectionné si vous souhaitez utiliser la fonctionnalité de type dynamique.
  • Sa propriété Ajuste automatiquement la police DOIT être cochée dans le générateur d'interface si vous souhaitez utiliser la fonction Type dynamique.
  • Désactivez la propriété Scrolling Enabled dans la section Scroll View de l'inspecteur d'attributs.

Une fois tous ces éléments vérifiés, la hauteur de la cellule et la taille de la police UITextView doivent s'adapter à la taille souhaitée .

Je vous suggère de jeter un œil à ce détaillé résumé de la vidéo WWDC 2017 qui explique parfaitement comment créer une application avec Dynamic Type.


0 commentaires

0
votes

Veuillez vérifier ceci pour une hauteur dynamique de textView dans tableView.

// Tableview Delegate Method
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "NotesCell", for: indexPath) as! NotesCell

    cell.txtViewNotes.tag = indexPath.row
    cell.txtViewNotes.delegate = self

    return cell;
}

// Textview Delegate Method
func textViewDidChange(_ textView: UITextView) {
        adjustFrames(textView)
}

// Custom Method    
func adjustFrames(_ textView: UITextView)  {
    let indexPath = IndexPath(row: textView.tag, section: 0)
    let cell = yourTableView.cellForRow(at: indexPath) as! NotesCell

    UIView.setAnimationsEnabled(false);

    self.yourTableView.beginUpdates()
        cell.constNoteHeight.constant = textView.contentSize.height
        textView.beginFloatingCursor(at: CGPoint.zero)
        textView.endFloatingCursor()
    self.yourTableView.endUpdates()

    UIView.setAnimationsEnabled(true);

}

Remarques: constNoteHeight est la constante de hauteur de textView.


0 commentaires