자동 레이아웃 및 Stackview를 사용하여 무언가를 달성하려고합니다. 아래에 표시된대로 UIView, UITextView 및 UIView 함께 세로 Stackview 있습니다.스크롤 사용 가능한 스택보기 내에서 UITextView 확장
여기 이전의 답변을 확인했지만이를 달성하기 클린 솔루션을 찾을 수 없습니다.
UITextView
은 편집 할 수 있으며 사용자가 입력 할 때 확장해야합니다.이 경우 IB의 UITextView
에 대한 스크롤을 사용 중지했습니다. UITextView에 설정된 높이 제약 조건이 "10보다 크거나 같음"으로 설정되고 줄 수가 0으로 설정되어 있기 때문에 UITextView
은 런타임에 사용자가 입력하는 동안 내부 높이를 사용합니다. UIStackView
아래쪽 가장자리가 키패드 액세서리의 위쪽 가장자리에 도달 할 때까지 UITextView를 계속 확장해야합니다. 나는 어느 정도 이해할 수있는 stackview needs Y position or height
하지만 내가 고정 된 높이나 바닥을 주면 오류가 계속 발생하고, 스택 뷰를 최상위, 후행 및 앞쪽 가장자리에 고정 된 UITextView
부분을 확장 할 수있었습니다. UITextView는 단순히 확장되지 않습니다.
또한 UITextView가 키보드 액세서리보기의 위쪽 가장자리에 도달했을 때 확장을 중지하는 방법을 잘 모르겠습니다. I 가지고
코드 원경
let allowedHeight = self.view.frame.height - (self.keyboardHeight! + self.accessory.frame.height)
기본적으로 keyboardheight + 소품 뷰 높이를 감산함으로써 뷰 프레임의 허용 높이를 찾는 것이다. 이 계산은 올바르게 수행됩니다. 다음으로 UITextView
에서 스크롤을 활성화/비활성화하는 것이 효과적 일 것을 기대하면서이 작업을 수행합니다 (그러나 textViewDidChange
). 그러나 전체 텍스트보기가 모든 키 스트로크에서 위아래로 점프하기 때문에 명확하게 doens't하지 않습니다.
func textViewDidChange(_ textView: UITextView) {
if stackView.frame.height >= allowedHeight{
textView.isScrollEnabled = true
}
if stackView.frame.height < allowedHeight{
textView.isScrollEnabled = false
}
}
내가 원하는 것을 달성하는 가장 좋은 방법은 무엇입니까?
감사합니다. 코드에 감사드립니다. 나는 이것을 시도 할 것이다. – Annjawn
이것은 완벽하게 작동합니다. iPhone X의 한 가지주의 사항. iPhone X의 안전 영역은 기본적으로 y 오프셋에 22pt를 추가합니다. 따라서 스택 뷰의 y 오프셋을 추가하면 키보드 뒤의 모든 것을 22px 아래로 밀었습니다. 세계의 끝이 아니라 쉽게 고칠 수 있습니다. 다시 감사합니다! – Annjawn