iOS/RxSwift

RxSwift) UITextView 동적 높이 조절

skyiOS 2024. 2. 6. 00:33
반응형
입력 값에 따라 텍스트뷰의 높이를  바꾸는법
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)
    }

 

 

반응형
반응형