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?