텍스트의 길이에 따라 배경을 동적으로 가변 (표시)하는 UITextView
9616 단어 iOSSwift3.0SwiftUITextViewXcode
소개
안녕하세요.
채팅 앱, 메모 앱 등에서 사용하는 것과 같은
배경의 길이가 가변의 UITextView의 구현에 조금 고민했기 때문에 써 보았습니다.
이르지 못하는 점 등 많이 있다고 생각합니다만, 코멘트등 받을 수 있으면 다행입니다.
샘플
Storyboard 준비
사실 UITextView의 높이가 늘어나는 것은 아닙니다.
뒤에 배치한 배경색이 있는 UIView가 동적으로 가변되도록 하고 있습니다.
UIView(배경) 제약
UITextView 제약
또한 배경 UIView Height Constraint 및 UITextView bottom Constraint
다음과 같이 IBOutlet 연결합니다.
(이미지에서는 UITextView의 bottomConstraint를 연결하고 있습니다. 마찬가지로 UIView의 HeightConstraint도 연결하십시오.)
내용에 맞게 배경 UIView가 너무 늘지 않도록 조절
UITextView의 Height는 다음과 같습니다.
그래서 너무 늘었을 때는 Window의 크기 (외형의 크기)에 맞게 조정합니다.
if textView.frame.height <= textViewBackgroundView.frame.height {
textViewBackgroundHeightConstraint.constant = textView.frame.size.height
}
샘플 코드
MainViewController.swiftimport UIKit
class MainViewController: UIViewController {
@IBOutlet weak var textView: UITextView!
@IBOutlet weak var textViewBackgroundView: UIView!
@IBOutlet weak var textViewBottomConstraint: NSLayoutConstraint!
@IBOutlet weak var textViewBackgroundHeightConstraint: NSLayoutConstraint!
override func viewDidLoad() {
super.viewDidLoad()
textView.delegate = self
NotificationCenter.default.addObserver(self,
selector: #selector(MainViewController.showKeyBoard(_:)),
name: NSNotification.Name.UIKeyboardWillShow,
object: nil)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
textView.becomeFirstResponder()
textView.tintColor = UIColor.black
}
deinit {
NotificationCenter.default.removeObserver(self)
}
//キーボードが表示された時の処理
func showKeyBoard(_ notification: Notification) {
if let userInfo = (notification as NSNotification).userInfo {
if let keyboard = userInfo[UIKeyboardFrameEndUserInfoKey] as? NSValue{
textViewBottomConstraint.constant = keyboard.cgRectValue.size.height
}
}
}
}
extension MainViewController: UITextViewDelegate {
//textに変更があった際に呼び出される
func textViewDidChange(_ textView:UITextView) {
if textView.frame.height <= textViewBackgroundView.frame.height {
textViewBackgroundHeightConstraint.constant = textView.frame.size.height
}else {
textViewBackgroundHeightConstraint.constant = textView.sizeThatFits(textView.frame.size).height
}
}
}
참고로 한 기사
Storyboard 준비
사실 UITextView의 높이가 늘어나는 것은 아닙니다.
뒤에 배치한 배경색이 있는 UIView가 동적으로 가변되도록 하고 있습니다.
UIView(배경) 제약
UITextView 제약
또한 배경 UIView Height Constraint 및 UITextView bottom Constraint
다음과 같이 IBOutlet 연결합니다.
(이미지에서는 UITextView의 bottomConstraint를 연결하고 있습니다. 마찬가지로 UIView의 HeightConstraint도 연결하십시오.)
내용에 맞게 배경 UIView가 너무 늘지 않도록 조절
UITextView의 Height는 다음과 같습니다.
그래서 너무 늘었을 때는 Window의 크기 (외형의 크기)에 맞게 조정합니다.
if textView.frame.height <= textViewBackgroundView.frame.height {
textViewBackgroundHeightConstraint.constant = textView.frame.size.height
}
샘플 코드
MainViewController.swiftimport UIKit
class MainViewController: UIViewController {
@IBOutlet weak var textView: UITextView!
@IBOutlet weak var textViewBackgroundView: UIView!
@IBOutlet weak var textViewBottomConstraint: NSLayoutConstraint!
@IBOutlet weak var textViewBackgroundHeightConstraint: NSLayoutConstraint!
override func viewDidLoad() {
super.viewDidLoad()
textView.delegate = self
NotificationCenter.default.addObserver(self,
selector: #selector(MainViewController.showKeyBoard(_:)),
name: NSNotification.Name.UIKeyboardWillShow,
object: nil)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
textView.becomeFirstResponder()
textView.tintColor = UIColor.black
}
deinit {
NotificationCenter.default.removeObserver(self)
}
//キーボードが表示された時の処理
func showKeyBoard(_ notification: Notification) {
if let userInfo = (notification as NSNotification).userInfo {
if let keyboard = userInfo[UIKeyboardFrameEndUserInfoKey] as? NSValue{
textViewBottomConstraint.constant = keyboard.cgRectValue.size.height
}
}
}
}
extension MainViewController: UITextViewDelegate {
//textに変更があった際に呼び出される
func textViewDidChange(_ textView:UITextView) {
if textView.frame.height <= textViewBackgroundView.frame.height {
textViewBackgroundHeightConstraint.constant = textView.frame.size.height
}else {
textViewBackgroundHeightConstraint.constant = textView.sizeThatFits(textView.frame.size).height
}
}
}
참고로 한 기사
UITextView의 Height는 다음과 같습니다.
그래서 너무 늘었을 때는 Window의 크기 (외형의 크기)에 맞게 조정합니다.
if textView.frame.height <= textViewBackgroundView.frame.height {
textViewBackgroundHeightConstraint.constant = textView.frame.size.height
}
샘플 코드
MainViewController.swiftimport UIKit
class MainViewController: UIViewController {
@IBOutlet weak var textView: UITextView!
@IBOutlet weak var textViewBackgroundView: UIView!
@IBOutlet weak var textViewBottomConstraint: NSLayoutConstraint!
@IBOutlet weak var textViewBackgroundHeightConstraint: NSLayoutConstraint!
override func viewDidLoad() {
super.viewDidLoad()
textView.delegate = self
NotificationCenter.default.addObserver(self,
selector: #selector(MainViewController.showKeyBoard(_:)),
name: NSNotification.Name.UIKeyboardWillShow,
object: nil)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
textView.becomeFirstResponder()
textView.tintColor = UIColor.black
}
deinit {
NotificationCenter.default.removeObserver(self)
}
//キーボードが表示された時の処理
func showKeyBoard(_ notification: Notification) {
if let userInfo = (notification as NSNotification).userInfo {
if let keyboard = userInfo[UIKeyboardFrameEndUserInfoKey] as? NSValue{
textViewBottomConstraint.constant = keyboard.cgRectValue.size.height
}
}
}
}
extension MainViewController: UITextViewDelegate {
//textに変更があった際に呼び出される
func textViewDidChange(_ textView:UITextView) {
if textView.frame.height <= textViewBackgroundView.frame.height {
textViewBackgroundHeightConstraint.constant = textView.frame.size.height
}else {
textViewBackgroundHeightConstraint.constant = textView.sizeThatFits(textView.frame.size).height
}
}
}
참고로 한 기사
import UIKit
class MainViewController: UIViewController {
@IBOutlet weak var textView: UITextView!
@IBOutlet weak var textViewBackgroundView: UIView!
@IBOutlet weak var textViewBottomConstraint: NSLayoutConstraint!
@IBOutlet weak var textViewBackgroundHeightConstraint: NSLayoutConstraint!
override func viewDidLoad() {
super.viewDidLoad()
textView.delegate = self
NotificationCenter.default.addObserver(self,
selector: #selector(MainViewController.showKeyBoard(_:)),
name: NSNotification.Name.UIKeyboardWillShow,
object: nil)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
textView.becomeFirstResponder()
textView.tintColor = UIColor.black
}
deinit {
NotificationCenter.default.removeObserver(self)
}
//キーボードが表示された時の処理
func showKeyBoard(_ notification: Notification) {
if let userInfo = (notification as NSNotification).userInfo {
if let keyboard = userInfo[UIKeyboardFrameEndUserInfoKey] as? NSValue{
textViewBottomConstraint.constant = keyboard.cgRectValue.size.height
}
}
}
}
extension MainViewController: UITextViewDelegate {
//textに変更があった際に呼び出される
func textViewDidChange(_ textView:UITextView) {
if textView.frame.height <= textViewBackgroundView.frame.height {
textViewBackgroundHeightConstraint.constant = textView.frame.size.height
}else {
textViewBackgroundHeightConstraint.constant = textView.sizeThatFits(textView.frame.size).height
}
}
}
봐 주셔서 감사합니다.
Reference
이 문제에 관하여(텍스트의 길이에 따라 배경을 동적으로 가변 (표시)하는 UITextView), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/KikurageChan/items/4e1a467858eb2323e009텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)