Text主要总结UILabel、UITextField、UITextView、UIMenuController以及UIWebView/WKWebView相关的一些问题。html
UI细节主要总结界面交互开发中遇到的一些细节问题,包括Masonry部分的问题。ios
动画介绍最近用到的两个,算是经常使用级别的,动画这部分以后会专门研究总结下。正则表达式
最后介绍两个工具及三个Xcode使用设置的问题。segmentfault
不限制UILabel的高度(宽度须要设置,肯定文字什么时候换行),numberOfLines设为0便可(设为0表示不限制行数)。 缓存
好比对文字的行间距有要求、一行文字某几个文字的大小、颜色有特殊要求等等,均可以经过NSMutableAttributedString来进行设置。网络
设置lineBreakMode,好比达到换行条件时按单词来换行NSLineBreakByWordWrapping,末尾显示省略号的NSLineBreakByTruncatingTail等。app
clearButtonMode,设置一键清空按钮显示模式,通常是在编辑状态下才显示该按钮 ide
placeholder/attributedPlaceholder,设置占位文本,若是对样式有特殊要求,好比颜色等,能够设置attributedPlaceholder。工具
keyboardType,设置初始进入编辑状态时,默认显示的键盘类型 ,好比输入手机号码的地方,使用数字键盘UIKeyboardTypeNumberPad便可,可是实际使用时发现,若是安装了第三方输入法好比搜狗输入法时,设置UIKeyboardTypeNumberPad不起做用,键盘仍然显示为其余类型,设置为UIKeyboardTypePhonePad则生效,不一样的是UIKeyboardTypePhonePad相对UIKeyboardTypeNumberPad而言还容许输入*, #,但基本样式相同。布局
下图为设置UIKeyboardTypePhonePad后的键盘类型
tintColor,好比对textField的编辑状态下光标的颜色有要求,设置这个属性便可。
tag,对于一个页面含有多个textField,经常须要在代理方法中进行区别单独处理,使用tag属性标明便可,textView等也是经过tag来进行区分
secureTextEntry,设置输入字符的明暗文显示,设置为YES输入字符时则显示为*,通常密码输入时用到,但须要注意的时,针对系统原生的textField,若是添加了一个明暗文开关按钮,经过控制该属性来切换显示模式时,会有一些问题,一是切换明暗文状态切换到暗文状态(secureTextEntry = YES),输入字符时以前的字符串会状况,而是暗文状态下,结束编辑状态在进入编辑状态后,若是点击删除按钮,会清空所有已输入的字符。若是想切换状态后输入不清空,再次进入编辑状态点击删除按钮只删除前一个字符,须要针对该属性重写一下textField。
textField不像textView,代理方法中是没有DidChange事件方法的,可是能够经过监听UIControlEventEditingChanged达到一样效果,进而限制输入字数
update:iOS开发笔记12:iOS7上UITextField限制字数输入致使崩溃问题
设置两个属性便可
在代理方法shouldChangeTextInRange中判断识别处理便可---- if ([text isEqualToString:@"\n"]) {...}
textView自己没有该属性,实现方法是在textView上添加一个UILabel做为placeholder,在代理方法中控制该label的显示状况,须要注意的是,UILabel若是直接加在textView上,后续调整布局在iOS7的设备上可能会崩溃,建议将textView加在一个view上,再将UILabel加在此view上进行控制便可。
写评论时若是字数较多,则textView的高度应该要随着内容的增长而变高,固然还要有一个高度限制,不能无限制增加。
在textView中输入字符时动态调整高度便可,如下方法在iOS七、八、9下测试可用
还有一个须要注意的问题,当再次进入编辑状态且存有上一次的输入草稿时,textView的光标通常应该显示在最后一个字的末尾
一是判断首位数字是否为1,二是根据现有状况判断第二位数字有效性,三是验证后续9个字符是否为数字
须要注意三点,一是注意在代理方法中设置顶部状态栏的转圈,即[UIApplication sharedApplication].networkActivityIndicatorVisible
二是在willDisappear中须要作一些处理
三是loadRequest的时候注意忽略缓存,不然页面可能不是最新数据
使用的与safari同样的引擎,iOS8及以上系统建议使用WKWebView取代UIWebView,比UIWebView好用不少,而且支持进度条显示。
当输入对象被弹出的键盘遮挡时,经常须要作上移操做,获取键盘高度是计算移动距离的关键之一,能够在键盘通知事件中获取其高度
须要注意的是,使用Masonry布局cell时,必定不要忽略bottom属性,由于是根据内容撑开的大小来计算高度,才能根据cell里内容肯定从顶部到底部的距离,即cell的高度。
若是使用mas_updateConstraints方法是更新已经设置过的布局属性,使用mas_remakeConstraints是清除原有布局设置,从新布局。
对点击区域进行判断,当点击区域在弹框范围外,进行关闭操做便可
最经常使用三个,一是将view移动至最上层
二是将view移动至最下层
三是将view加载到window上
UIImageView默认userInteractionEnabled属性为NO,须要开启,不然在上面添加UIButton后,点击UIButton是没法响应的,由于做为父视图的UIImageView的userInteractionEnabled属性为NO时,触摸事件是不会继续往下传递给子视图的,子视图永远没法处理触摸事件。
好比一个很小的图标须要支持点击,须要注意增大UIButton的响应区域,考虑用户的点击体验。
SDWebImage已经封装了方法支持监控加载进度
使用轮播图时注意关闭userInteractionEnabled属性,不然点击pageControl区域,小圆点index会变化。
iOS8以上建议用PHPhotoLibrary,使用ALAssetsLibrary当照片数量较多时可能会加载不彻底。
另外须要注意的是过滤非照片类型的数据,好比视频等
选取一张渐变色的加载转圈图片,对图片设置动画效果
使用UIBezierPath画一个矩形,控制点添加在中间,且注意最后一个点要闭合,根据滑动的距离,控制点的X坐标随之移动变化便可
效果以下
app使用友盟统计上线后,根据错误崩溃信息查找问题可使用“dSYM ”这个工具进行跟踪处理。
mac上能够下载该工具来模拟网络环境进行测试,在真机上则能够经过设置里的开发者选项找到这些工具。
因为设置启动图加载方式为LaunchImage,可是没有给图片致使,系统会根据LaunchImage尺寸来决定显示尺寸,添加LaunchImage后正常显示
得到Xcode的UUID,添加到插件对应的工程里,从新运行一遍便可正常使用。
获取Xcode的UUID:“defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID”
对于常常重复输入的一些代码,好比一些代理方法,布局代码等,使用代码块进行管理能够提升效率,对于其中的变量,在设置代码块的时候,以<#变量名称#>这样的格式设置便可,下次使用时,编译器就能识别出这里须要输入值。
(1)Text Programming Guide for iOS
(2)AssetsLibrary framework broken on iOS 8
(7)Understanding and Analyzing iOS Application Crash Reports
(8)Xcode插件 info.plist/DVTPlugInCompatibilityUUIDs
(9)dSYM 文件分析工具