나는 inputAccessoryView
사용자 정의 tableView
을 가지고 있으며, tableView.keyboardDismissMode
은 .interactive
으로 설정되어 있습니다. UIView
하위 클래스를 만들고이 클래스를 내 사용자 지정 inputAccessoryView
으로 만듭니다.신속한 문제 inputAccessoryView
보기에 textView
이 있으며 특정 수의 줄에 도달 할 때까지 자동으로 크기를 조정했습니다. 이는 내 코드입니다 :
override var intrinsicContentSize: CGSize {
DispatchQueue.main.async {
let path = IndexPath(row: self.tableView.numberOfRows(inSection: 0) - 1, section: 0)
self.tableView.scrollToRow(at: path, at: .bottom, animated: true)
}
sendButton.frame.origin.y = self.frame.maxY - 5 - sendButton.frame.height
return CGSize(width: self.bounds.width, height: (textView.numberOfLines() < 10 ? textView.text.sizeForWidth(width: textView.frame.width, font: textView.font!).height : 254) + textView.frame.origin.y * 2)
}
func textViewDidChange(_ textView: UITextView) {
placeholderLabel.isHidden = !textView.text.isEmpty
if textView.numberOfLines() < 10 { // I defined numberOfLines() elsewhere
textView.isScrollEnabled = false
} else {
textView.isScrollEnabled = true
}
invalidateIntrinsicContentSize()
}
.async {}
블록은 inputAccessoryView
높이가 증가하면 다시 tableView
의 하단으로 스크롤을위한 것입니다.
내 문제는 내가 키보드를 숨기려면 tableView
에 아래로 드래그하면, tableView
내가 그것을 아래로 스크롤하지 않을 스크롤 애니메이션합니다 (async
블록의 하나)를 실행한다는 것입니다. 여기 무슨 일이 일어나고 있는지 a video입니다.
나는 이것을 지금 며칠 동안 내가 원하는 방식으로 작동 시키려고 애 쓰고있다. 아무도 그것을 왜 내가 그것을 고칠 수있는 그것을 원하는대로 작동하지 않는 이유를 설명해 주시겠습니까?
미리 감사드립니다.
아무것도를
tableView
현재 스크롤중인 경우 내가 설정UIScrollView
위임 방법을 사용했다. – matt