一、UILabel 的孪生兄弟
在本系列的第二篇文章
《写给设计师的iOS前端教程(二)UILabel》
里,我们介绍了 UILabel 组件。今天,我们来介绍 UILabel 的孪生兄弟 — UITextView。
这俩兄弟都是用来显示文字的,有什么区别呢?
差异点
|
UILabel
|
UITextView
|
交互
|
不可以编辑、选中、复制
|
可以编辑、选中、复制
|
垂直方向
|
居中对齐
|
顶部对齐
|
超出区域
|
超出区域被隐藏
|
滚动条
|
UILabel 通常用在一两行的,不需要交互的文字。例如标题,备注文字。
UITextView 主要用大段的,需要有交互的文字。例如新闻的正文,发微博、朋友圈的输入框。
Object-C 与 Photoshop 的文字工具
举个不太严谨的例子,UILabel 就像 Photoshop 里文字工具的单行模式(换行需要手动敲回车的,见上图右上角),UITextView 就像 Photoshop 里文字工具的区域模式(超出区域会自动换行的,见上图右下角)。
二、UITextView 正式登场
翠花,上代码!
UITextView *myTextView = [[UITextView alloc] initWithFrame:CGRectMake(20, 20, self.view.frame.size.width - 40, 220)];
myTextView.text = @"这里是一大段的文字";
myTextView.font = [UIFont systemFontOfSize:16];
myTextView.textColor = [UIColor darkTextColor];
[self.view addSubview:myTextView];
三、代码详解
1、赋值、坐标、尺寸(必选)
UITextView *myTextView = [[UITextView alloc] initWithFrame:CGRectMake(20, 20, self.view.frame.size.width - 40, 220)];
2、文字的内容
myTextView.text = @"这里是一大段的文字";
3、文字的字体
myTextView.font = [UIFont systemFontOfSize:16];
4、文字的颜色
myTextView.textColor = [UIColor darkTextColor];
5、显示出来
[self.view addSubview:myTextView];
看过前面几篇教程之后,再看这五行代码是不是很轻松啊?:D
四、常见问题
1、 编辑、选中、复制
UITextView 默认是不支持编辑,也不支持选中、复制的。只需要加两行代码就行了。
myTextView.editable = YES;
myTextView.selectable = YES;
-
editable 可以编辑
-
selectable 可以选中、复制
2、 滚动条
如果文字很多,超出了 UITextView 的尺寸区域,那么先不显示滚动条,当你滚动的时候会显示,滚动停止后又消失。我觉得这个默认设置还不错。
你可以强制不允许滚动
myTextView.scrollEnabled = false;
也可以始终不显示滚动条
myTextView.showsVerticalScrollIndicator = NO;
3、 行间距
UITextView 是专门伺候大段文字的,但是,默认的行间距太小了,挑剔的设计师怎么受得了呢?这个时候,你需要 attributedText(富文本)来帮忙。
UITextView *myTextView = [[UITextView alloc] initWithFrame:CGRectMake(20, 20, self.view.frame.size.width - 40, 220)];
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.lineSpacing = 10;
NSDictionary *attributes = @{NSForegroundColorAttributeName:[UIColor darkTextColor],
NSFontAttributeName:[UIFont systemFontOfSize:16],
NSParagraphStyleAttributeName: paragraphStyle
};
myTextView.attributedText = [[NSAttributedString alloc] initWithString:@"一大段文字" attributes:attributes];
[self.view addSubview:myTextView];
代码有点儿多,别怕,我们来一步步看看,attributedText 是怎么做到的。
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.lineSpacing = 10;
NSMutableParagraphStyle 就相当于是 CSS 样式,lineSpacing 是行高,设计师要调的就是这个数值啦。
NSDictionary *attributes = @{NSForegroundColorAttributeName:[UIColor darkTextColor],
NSFontAttributeName:[UIFont systemFontOfSize:16],
NSParagraphStyleAttributeName: paragraphStyle
};
myTextView.attributedText = [[NSAttributedString alloc] initWithString:@"一大段文字" attributes:attributes];
NSDictionary 是给富文本定义的一堆属性: