zoukankan      html  css  js  c++  java
  • ios swift UITextView高度自适应

    在ios开发中,用到多行输入时一般都会用到UITextView。常见的比如说聊天输入框,评论输入框等,当用户输入多内容时,我们希望高度能根据用户输入的内容扩大而扩大。其实实现这个功能也不是很难,只需要自定义一个类并继承UITextView,然后实现其代理UITextViewDeletage,重写textViewDidChange,只需要在这个方法中进行处理即可。下面开始撸代码:

    1.先创建一个类:MyTextView

    class MyTextView: UITextView,UITextViewDelegate {

        varmaxHeight:CGFloat=60//定义最大高度

        overrideinit(frame:CGRect, textContainer:NSTextContainer?) {

            super.init(frame: frame, textContainer: textContainer)

            //textview的一些设置

            self.delegate=self

            self.layer.borderColor = UIColor.lightGray.cgColor

            self.layer.borderWidth=0.5

            self.layer.cornerRadius=5

            self.layer.masksToBounds=true

        }

        requiredinit?(coder aDecoder:NSCoder) {

            fatalError("init(coder:) has not been implemented")

        }

        functextViewDidChange(_textView:UITextView) {

            //获取frame值

            letframe = textView.frame

            //定义一个constrainSize值用于计算textview的高度

            let constrainSize=CGSize(frame.size.width,height:CGFloat(MAXFLOAT))

            //获取textview的真实高度

            var size = textView.sizeThatFits(constrainSize)

            //如果textview的高度大于最大高度高度就为最大高度并可以滚动,否则不能滚动

            if size.height>=maxHeight{

                size.height=maxHeight

                textView.isScrollEnabled=true

            }else{

                textView.isScrollEnabled=false

            }

            //重新设置textview的高度

            textView.frame.size.height=size.height

        }

    }

    2.开始测试:

    classViewController:UIViewController{

        overridefuncviewDidLoad() {

            super.viewDidLoad()

            //测试自定义的TextView

            lettextview =MyTextView(frame:CGRect(x:20,y:100,200,height:30))

            self.view.addSubview(textview)

        }

    }

    3.运行结果:


     

    总结:UITextView高度自适应的实现就到这里了,如果有什么问题欢迎评论、留言,谢谢!

    demo下载地址:MyTextViewDemo

    简书地址: Code人生

  • 相关阅读:
    ES6---async, await, promise 综合例子
    ES6---Promise应用: async, await
    ES6---Promise 4: 更多案例
    掌握这两个技术点,你可以玩转AppCan前端开发
    AppCan4.0:开发者要做有价值的APP
    以“掌上东航”为例,论混合开发在企业级项目中的实践
    基于AppCan MAS系统,如何轻松实现移动应用数据服务?
    正益移动王国春:布局在是与不是之间
    【TOP10 APP】这些应用成了AppCan千人大会的焦点
    我爱我家:我为什么选择AppCan?
  • 原文地址:https://www.cnblogs.com/zzjbk/p/8483114.html
Copyright © 2011-2022 走看看