반응형
입력 값에 따라 텍스트뷰의 높이를 바꾸는법
isScrollEnabled: 사이즈 증가를 위해 스크롤을 막는다
lessThanOrEqualTo: 최대높이를 설정 한다.
let chattingTextView = {
let view = UITextView()
view.backgroundColor = Colors.backgroundPrimary.color
view.font = Font.body.fontWithLineHeight()
view.isScrollEnabled = false
return view
}()
chattingTextView.snp.makeConstraints { make in
make.height.lessThanOrEqualTo(54)
}
rx.didChange: 텍스트뷰의 텍스트가 변경될 때 호출되는 이벤트입니다.
sizeThatFits: 텍스트뷰의 현재 높이를 추정합니다.
isMaxHeight: 특정 높이 이상인지 여부를 판단합니다. 여기서는 3줄이상을 판단합니다.
private func textViewBind() {
mainView.chattingInputView.chattingTextView.rx
.didChange
.bind(with: self) { owner, _ in
let size = CGSize(width: owner.mainView.chattingInputView.chattingTextView.frame.width, height: .infinity)
let estimatedSize = owner.mainView.chattingInputView.chattingTextView.sizeThatFits(size)
print("텍스트뷰사이즈======",estimatedSize)
// 1줄 31.6
//2줄 47.3
//3줄 62.6
let isMaxHeight = estimatedSize.height >= 60
guard isMaxHeight != owner.mainView.chattingInputView.chattingTextView.isScrollEnabled else { return }
owner.mainView.chattingInputView.chattingTextView.isScrollEnabled = isMaxHeight
owner.mainView.chattingInputView.chattingTextView.reloadInputViews()
owner.mainView.chattingInputView.chattingTextView.setNeedsUpdateConstraints()
}.disposed(by: disposeBag)
}
반응형
반응형
'iOS > RxSwift' 카테고리의 다른 글
RxSwift) textField.rx.text 텍스트가 변경될 때만 이벤트 감지 (1) | 2023.11.24 |
---|