J'essaie de forcer UITextView
pour garder le signe d'insertion toujours à la même hauteur fixe, par exemple dans le quart de l'écran.
Je devrais me comporter comme les anciennes machines à écrire - lorsque l'utilisateur appuie sur la touche Entrée (ou atteint la fin de la ligne), le texte devrait défiler d'une ligne vers le haut et le curseur devrait rester dans la même position y et sauter au début de la nouvelle ligne.
J'ai essayé de le faire comme ça, mais il se comporte de manière inattendue, le caret saute parfois de manière aléatoire et le défilement est visible, il se fait défiler vers le bas et ensuite je le fais défiler vers le haut avec scrollRectToVisible
cela ne semble pas être la manière idéale de le faire.
Comment puis-je obtenir un tel effet ? Toute bibliothèque ou pod ayant une fonctionnalité similaire serait également très appréciée.
func setScrollToMiddle() {
if let selectedRange = textView.selectedTextRange {
let caretRect = textView.caretRect(for: selectedRange.start)
let middleOfCaretHeight = caretRect.origin.y + (caretRect.height / 2)
let screenHeight = UIScreen.main.bounds.height
guard let kbSize = self.keyboardSize else { return }
let keyboardHeight = kbSize.height
let visibleTextAreaHeight = screenHeight - keyboardHeight - topMenuView.frame.height
let finalRectY = middleOfCaretHeight - topMenuView.frame.height - (visibleTextAreaHeight / 2)
let finalRect = CGRect(x: 0.0, y: finalRectY, width: textView.frame.width, height: visibleTextAreaHeight)
textView.scrollRectToVisible(finalRect, animated: false)
}
}