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".
3 Réponses :
Utilisez GrowingTextView , pour UITextView
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
Quelques étapes à vérifier pour UITextView
:
Ajuste automatiquement la police
DOIT être cochée dans le générateur d'interface si vous souhaitez utiliser la fonction Type dynamique. 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.
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.
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?