上面一篇讲述了UITextView的简单使用,但是我们在微信等社交APP经常会见到UITextView的一些使用是这样的:

  

随着输入的字数,行数不断增加,并达到一定的高度后不再增加,用户可以用滚动条查看全部text。

这个其实就是UITextView对高度的自适应。要解决这个问题,首先我们必须对几个重要的属性的彻底理解才能达到游刃而解的效果。

因为UITextView是继承UIScrollView的,而对于内容展示而言,UIScrollView下面几个属性非常地重要:

@property(nonatomic)         CGPoint                      contentOffset;                  // default CGPointZero
@property(nonatomic)         CGSize                       contentSize;                    // default CGSizeZero
@property(nonatomic)         UIEdgeInsets                 contentInset;                   // default UIEdgeInsetsZero. add additional scroll area around content

我之前的文章学习是有专门对这几个属性的学习的,可以参考大神的博客:

http://www.cnblogs.com/kenshincui/p/3913885.html#UIScrollView

理解好这张图片就足矣:

参考好上面这个文章,我这里给出一个简单的例子:

#import "LBTextViewNewController.h"@interface LBTextViewNewController () <UITextViewDelegate>@property (nonatomic, strong) UITextView* myTextView;@end@implementation LBTextViewNewController- (void)viewDidLoad
{[super viewDidLoad];self.myTextView = [[UITextView alloc] init];[self.myTextView setFrame:CGRectMake(0, 0, 300, 150)];[self.myTextView setCenter:CGPointMake(self.view.center.x, self.view.center.y - 50)];[self.myTextView setDelegate:self];[self.myTextView setReturnKeyType:UIReturnKeyNext];[self.myTextView setScrollEnabled:YES];[self.myTextView setFont:[UIFont systemFontOfSize:18.0]];[self.myTextView setAutoresizingMask:UIViewAutoresizingFlexibleHeight];[self.myTextView.layer setBackgroundColor:[UIColor clearColor].CGColor];[self.myTextView.layer setBorderColor:[UIColor lightGrayColor].CGColor];[self.myTextView.layer setBorderWidth:1.0];[self.myTextView.layer setCornerRadius:8.0f];[self.myTextView.layer setMasksToBounds:YES];[self.myTextView setText:@"守夜人誓言:“长夜将至,我从今开始守望,至死方休。我将不娶妻、不封地、不生子。我将不戴宝冠,不争荣宠。我将尽忠职守,生死於斯。我是黑暗中的利剑,长城上的守卫。我是抵御寒冷的烈焰,破晓时分的光线,唤醒眠者的号角,守护王国的坚盾。我将生命与荣耀献给守夜人,今夜如此,夜夜皆然。守夜人誓言:“长夜将至,我从今开始守望,至死方休。我将不娶妻、不封地、不生子。我将不戴宝冠,不争荣宠。我将尽忠职守,生死於斯。我是黑暗中的利剑,长城上的守卫。我是抵御寒冷的烈焰,破晓时分的光线,唤醒眠者的号角,守护王国的坚盾。我将生命与荣耀献给守夜人,今夜如此,夜夜皆然。"];[self.view addSubview:self.myTextView];NSLog(@"self.myTextView.contentOffset: %@", NSStringFromCGPoint(self.myTextView.contentOffset));NSLog(@"self.myTextView.contentInset: %@", NSStringFromUIEdgeInsets(self.myTextView.contentInset));[self performSelector:@selector(adjusetTextViewContentOffset) withObject:nil afterDelay:3.0];}- (void)adjusetTextViewContentOffset
{[self.myTextView setContentOffset:CGPointMake(0, 150) animated:YES];
}@end

可以看到延迟3秒后内容会自动上移动,试着将:

[self.myTextView setContentOffset:CGPointMake(0, 150) animated:YES];

150改成-150,会发现上面多了一条空白空间,明白了这个巧妙的特性之后,相信对自适应就有很好的解决方法了吧:

当一定高度之内,输入框可以随着输入内容的高度增加而自动增加,而达到一定的高度后(例如一定行数),输入框的高度不再调整,而使得内容的偏离度改变只展示后面的text内容。

但说得容易,实际做起来的确不容易,下面的篇章会仔细讲解(甚至会讲解多种方法)。

UITextView - 2相关推荐

  1. iOS UILabel UITextView自适应文本,或文本大小自适应

    //UILabel自适应文本的高度 UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0, 100, 300, 100)];label ...

  2. iOS UITextView 随键盘弹出界面上移

    - (void)textViewDidBeginEditing:(UITextView *)textView { CGRect frame = textView.frame; int offSet = ...

  3. Swift - 多行文本输入框(UITextView)的用法

    1,多行文本控件的创建 1 2 3 4 var textview=UITextView(frame:CGRectMake(10,100,200,100)) textview.layer.borderW ...

  4. UITextView 取消键盘方法

    首先UITextView 要实现delegate UITextViewDelegate 然后在.m文件里实现该协议: - (void)textViewDidBeginEditing:(UITextVi ...

  5. IOS学习笔记(四)之UITextField和UITextView控件学习

    IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...

  6. UITextView中的占位符

    我的应用程序使用UITextView . 现在,我希望UITextView具有类似于可以为UITextField设置的占位符. 这个怎么做? #1楼 简单的方法,只需使用以下UITextViewDel ...

  7. UITextView左边距为0

    UITextView左边距为0 [TextView.textContainer setLineFragmentPadding:.0]; [TextView.layoutManager setAllow ...

  8. 【iOS 开发】基本 UI 控件详解 (UIButton | UITextField | UITextView | UISwitch)

    博客地址 : http://blog.csdn.net/shulianghan/article/details/50051499 ; 一. UI 控件简介 1. UI 控件分类 UI 控件分类 : 活 ...

  9. UITextField与UITextView的区别

    2019独角兽企业重金招聘Python工程师标准>>> UITextField继承UIControl 1.文字永远是一行,不能显示多行文字 2.有placehoder属性设置占位文字 ...

  10. iOS开发 - UITextView输入时高度自适应

    2019独角兽企业重金招聘Python工程师标准>>> // 设置边距 依次为:上,左,下, 右 textView.textContainerInset = UIEdgeInsets ...

最新文章

  1. 操作系统学习:Linux0.12初始化详细流程-进程1调度与读取硬盘数据
  2. SetWindowOrg等相关函数
  3. day25 Python四个可以实现自省的函数,反射
  4. 反编译APK文件的三种方法
  5. 巧用EditPlus包含VS2010网站项目资源
  6. 二、OC的构造方法和descriprtion方法
  7. 《凡人修仙传》中打斗场景(c++多态实现)
  8. 该Tiled地图制作拿到项目~~这是偷懒,为了直接复制后写来
  9. php基本类,php入门一之十大基本类型
  10. 2016年象行中国(上海站)圆满结束,会议PPT分享
  11. 安卓系统管理软件_便捷仓库管理软件智能管理系统
  12. String.split()与StringUtils.split()的区别
  13. 央行等8部委发文规范供应链金融,严禁无牌开展相关业务
  14. 回调函数,事件管理器
  15. Predicting Ship T rajectory Based on Neural Networks UsingAIS Data
  16. 自动化成本高?那么如何获得最高的投资回报呢?
  17. BUG日志:无法解析的外部符号 _Direct3DCreate9
  18. miui系统分身测试软件,【MIUI 8评测】手机分身初上手,黑科技值爆表!
  19. 开源权限引擎可能理解了骇客帝国
  20. 山东大学单片机原理与应用实验 3.4 矩阵键盘扫描实验

热门文章

  1. U-Mail邮件系统管理功能 高效办公轻松搞定
  2. 学3D建模,次时代游戏的制作流程以及游戏美术需要掌握哪些基本软件?
  3. Linux文件夹的介绍
  4. Linux学习(一) —— 各个文件夹的作用
  5. 百度地图WEB服务-正地理编码使用心得
  6. 腾讯地图产业版 WeMap 官网正式发布
  7. 最大公约数是啥意思_什么是最大公约数
  8. 人大金仓 创建表空间_人大金仓kingbaseES安装及操作
  9. jpa 人大金仓数据库方言_KDC——人大金仓数据库比对工具
  10. 童年辣条神话卫龙,首日破发“辣条第一股”,跌超10亿