iOS开发小技巧
1.
解析详情页(是webView)遇到的3个问题:
1.图片太大,超出屏幕范围
2.怎么在webView上面添加一行文字
3.文字太小
1.解决方法
webView.scalesPageToFit =YES;
2.字符串拼接html代码
3.解决方法
设置代理
- (void)webViewDidFinishLoad:(UIWebView *)webView{
[webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '250%'"];
}
2.
去掉状态栏
在要隐藏的控制器里的viewWillAppear里添加:
if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {
[self prefersStatusBarHidden];
[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
}
再添加prefersStatusBarHidden方法
- (BOOL)prefersStatusBarHidden
{
return YES;//隐藏为YES,显示为NO
}
3.
高德地图显示附近信息,设置范围后还是20条数据,原因是默认是20条,最多50条,大于50条信息会放在下一页。
//设置默认条数
request.offset = 50;
//设置显示页数
request.page = 1;
4.
github部分电脑上传到本地过程中未能正常上传,不能显示工程(解决方 法为显示隐藏文件,删除自带git文件.原因:xcode7 自带git 导致导入过程中默认为已经导入github)
5.
1.合并的时候发生冲突
打开存在冲突的文件,会看到如下标志:
<<<<<<<标记冲突开始,后面跟的是当前分支中的内容。
HEAD指向当前分支末梢的提交。
=======之后,>>>>>>>之前是要merge过来的另一条分支上的代码。
>>>>>>>之后的跟的是要合并过来的分支的名称
6.
*** Terminating app due to uncaught exception ‘NSGenericException’, reason: ‘*** Collection <__NSArrayM: 0xb550c30> was mutated while being enumerated.’
当程序出现这个提示的时候,是因为你一边便利数组,又同时修改这个数组里面的内容,导致崩溃,网上的方法如下:
NSMutableArray * arrayTemp = xxx;
NSArray * array = [NSArray arrayWithArray: arrayTemp];
for (NSDictionary * dic in array) {
if (condition){
[arrayTemp removeObject:dic];
}
}
这种方法就是在定义一个一模一样的数组,便利数组A然后操作数组B
7.
让tableView的头视图跟着tableView一起滑动
需要将tableViewController中的tableView样式改为grouped的,因为tableView默认的样式是plain,在tableViewCotroller中重写initWithStyle方法
方法1:
//重写init方法,将tableView的样式设为group的样式,区头就会跟着滑动了 最好不要重写 否则 全变成Grouped样式 可在初始化时候设置样式
-(instancetype)initWithStyle:(UITableViewStyle)style{
if (self = [super initWithStyle:UITableViewStyleGrouped]) {
return self;
}
return self;
}
方法2:修改tableView的位置
- (void)loadHeaderImage
{
CGFloat offest = 120;
self.tableView.contentInset = UIEdgeInsetsMake(offest, 0, 0, 0);
self.imgVIew = [[UIImageView alloc] init];
self.imgVIew.frame = CGRectMake(0, -offest, kScreenWidth, offest);
self.imgVIew.image = [UIImage imageNamed:@"image090"];
[self.tableView addSubview:self.imgVIew];
}
UIEdgeInsets UIEdgeInsetsMake (
CGFloat top,
CGFloat left,
CGFloat bottom,
CGFloat right
);
8.
1.
// 去掉cell横线
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
2.
// 点击单元格的时候取消选中单元格
// 点击单元格的时候取消选中单元格 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
[self.tableView deselectRowAtIndexPath:indexPath animated:YES];
}
9.
1、错误描述:Xcode重装后,导致cocopods执行安装第三方时出错
错误信息:xcrun: error: active developer path ("/Users/apple/Desktop/Xcode5.app/Contents/Developer") does not exist, use xcode-select to change
解决方案:命令行输入:sudo xcode-select -switch /Applications/Xcode2.app/Contents/Developer
备注:Xcode2为新装Xcode的名称
10.
searchBar搜索拼接中文,需要转换utf8编码
NSString *typeString = (__bridge NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,(__bridge CFStringRef)(需要转换的文字),NULL,(CFStringRef)@"!*'();:@&=+$,/?%#[]",kCFStringEncodingUTF8);
11.
定义tableView上方有一条多余白框 (原因,系统默认给的可滑动距离,用如下方法解决去除)
self.automaticallyAdjustsScrollViewInsets = NO;
12.
This application is modifying the autolayout engine from a background thread, which can lead to engine corruption and weird crashes. This will cause an exception in a future release
集合视图加载完数据以后.必须要调用reloadData方法刷新视图,否则程序会崩溃,因为item的个数为第一次运行的个数, 且因为后面的不会走创建item个数的方法,如果刷新后,会走这个方法,这样就避免了item与数据的不对应
13.
当collectionView的内容没有超过collectionView的大小时,如果想让collectionView始终滑动,则可以设置alwaysBounceVertical的值为YES
14.
可视化自适应cell高度的时候,如果多个控件需要自适应,最后一个控件需要四个约束
自适应代码:
self.tableView.rowHeight = UITableViewAutomaticDimension;
self.tableView.estimatedRowHeight = 100;
15.
问题描述:tableView初始加载无数据时,不想显示单元格线
解决方案:当tableView加载完毕时,调用如下方法
//tableView参数为要隐藏单元格线的tableView
-(void)setExtraCellLineHidden: (UITableView *)tableView
{
UIView *view = [UIView new];
view.backgroundColor = [UIColor clearColor];
[tableView setTableFooterView:view];
}
16.
.LeanCloud Pointer类型关系中属性的获取
解决方法:LeanCloud只会返回id,不会返回属性,要在需要的时候自己查询匹配再使用
17.
实现拖动列表时放大列表顶部的图片,在集合视图上添加该视图后,视图图片会遮挡住区头视图的内容.
解决办法:
将图片视图的contentMode属性设置为UIViewContentModeScaleToFill,使图片视图的大小随着自己设置的frame缩放.
UIViewContentMode 是UIView的属性
默认是UIViewContentModeScaleToFill
UIViewContentModeScaleToFill,//图片内容随着图片视图的frame进行缩放,图片可能会变形
UIViewContentModeScaleAspectFit,//保证图片比例不变,而且全部显示在图片视图上,但图片视图可能会有空白
UIViewContentModeScaleAspectFill,//图片比例不变,而且填充整个图片视图,根据原图片的大小填充视图
UIViewContentModeRedraw,通过设置contentMode属性值为UIViewContentModeRedraw。那么将在每次设置或更改frame的时候自动调用drawRect:方法
ter下面这几个属性就是设置图片视图的内容是在顶部还是底部之类的位置,按字面意思就可以理解
UIViewContentModeTop,
UIViewContentModeBottom,
UIViewContentModeLeft,
UIViewContentModeRight,
UIViewContentModeTopLeft,
UIViewContentModeTopRight,
UIViewContentModeBottomLeft,
UIViewContentModeBottomRight,
UIViewContentModeBottom,
UIViewContentModeLeft,
UIViewContentModeRight,
UIViewContentModeTopLeft,
UIViewContentModeTopRight,
UIViewContentModeBottomLeft,
UIViewContentModeBottomRight
18.
.github上传代码通过cocopods导入第三方,下载后有人工程报错 显示引入包的头文件找不到
用 cocoaPods 添加第三方库, 成功之后,在工程中却导入不了头文件,而且根本没有提示,
那么,我们就在 TARGETS --> Build Settings —> User Header Search Paths 中 添加 ${SRCROOT} , 并把 no-recursive 改为 recursive
19.
遇到一坑: 数据解析正确,model(数据模型)中的属性等都正确 在控制器中去赋值,却没有值,打断点发现根本没有走model(数据模型)中 .m 文件的setValue:(id)value forUndefinedKey:(NSString *)key的方法
原因: 因为调用解析数据的方法时,使用了 block 方法传值, block方法在执行的顺序上 是先执行大括号外面的,然后再走block块大括号内部,如果在block外面写赋值,那么值就是空的,因为值还没传递出来,所以这时候要把赋值方法放在block内部,值就可以顺利传递了!
20.
project.pbxproj合并冲突问题
由于目录结构修改导致冲突(新增文件等)
合并之后导致工程无法打开
解决方法
打开project.pbxproj文件
查找类似<<<<<<<<,++++++++,>>>>>>>>所在的行
找到之后删除整行
保存
21.
button内部有imageView和titleLabel两个控件,按钮的内边距分为content(整体)、title(标题)、image(图片)三个,因此对于水平排布,可以通过内边距和修改控件坐标两种方式实现;而竖直排布只能通过修改坐标,因为UIButton默认的是水平排布。
22.
.解析的数据去掉html标签
- (NSString *)filterHTML:(NSString *)html{
NSScanner * scanner = [NSScanner scannerWithString:html];
NSString * text = nil;
while([scanner isAtEnd]==NO)
{
//找到标签的起始位置
[scanner scanUpToString:@"<" intoString:nil];
//找到标签的结束位置
[scanner scanUpToString:@">" intoString:&text];
//替换字符
html = [html stringByReplacingOccurrencesOfString:[NSString stringWithFormat:@"%@>",text] withString:@""];
}
// html = [_message stringByReplacingOccurrencesOfString:@" " withString:@""];
// NSString * regEx = @"<([^>]*)>";
// html = [html stringByReplacingOccurrencesOfString:regEx withString:@""];
return html;
}
23.
网络请求的图片,需要实现点击响应控制器跳转的事件,并且跳转的页面需要得到上个页面网络请求来的图片,对其进行操作,这时使用block传值的同时需要对imageView进行copy,否则点击图片跳转第二个页面在返回第一个页面会造成第一个的图片消失,解决问题的具体代码:- (UIImageView*)duplicate:(UIImageView*)view
{
NSData * tempArchive = [NSKeyedArchiver archivedDataWithRootObject:view];
return [NSKeyedUnarchiver unarchiveObjectWithData:tempArchive];
}
24.
引入友盟分享,从友盟官网下载,拖入项目,与COCOAPODS 冲突
使用 COCOAPODS 引入,虚拟机测试没有问题,真机无法测试
错误信息:
'Pods/UmengSocial/Umeng_SDK_Social_iOS_ARM64_4.3/UMSocial_Sdk_Extra_Frameworks/LaiWang/libSocialLaiWang.a(LWApiRequest.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
解决方法:
1.找到TARGETS下的Build Settings;
2.搜索Bitcode,设置为NO;
25.
cell重用问题,cell上的控件点击后改变状态或者值,当时有效,活动后出现错乱。
解决方案:用字典将点击的cell的row当成KEY值,状态或者值当成value存起来,在cellForRow方法里,根据字典里面的key值去设置对应的cell的状态或者值。
26.
tableView的header如果想设置高度为0,不能return 0,这时会有高度。可以设置成0.01。
27.
text 文本无法实现文字间距 可以使用 attributedText
//字间距
[attributedStr addAttribute: NSKernAttributeName value: @1 range: NSMakeRange(0, healthInformation.description_string.length)];
28.
定义static类型变量应该在本文件内使用,文件之间无影响,但是,可能会出现缓存问题报错,建议不要重复命名.显示错误不会正确提示,很难找
29.
const修饰的常量的值不能修改,同个工程中不能出现两个一样的常量名。
iOS开发小技巧的更多相关文章
- iOS开发小技巧 - UILabel添加中划线
iOS开发小技巧 遇到的问题: 给Label添加中划线,然后并没有效果 NSString *str = [NSString stringWithFormat:@"合计金额 ¥%.2f&quo ...
- iOS开发小技巧 - runtime适配字体
iOS开发小技巧 - runtime适配字体 版权声明:本文为博主原创文章,未经博主允许不得转载,有问题可联系博主Email: liuyongjiesail@icloud.com 一个iOS开发项目无 ...
- iOS开发小技巧 -- tableView-section圆角边框解决方案
[iOS开发]tableView-section圆角边框解决方案 tableView圆角边框解决方案 iOS 7之前,图下圆角边框很容易设置 iOS 7之后,tableviewcell的风格不再是圆角 ...
- iOS开发小技巧--即时通讯项目:消息发送框(UITextView)高度的变化; 以及UITextView光标复位的小技巧
1.即时通讯项目中输入框(UITextView)跟随输入文字的增多,高度变化的实现 最主要的方法就是监听UITextView的文字变化的方法- (void)textViewDidChange:(UIT ...
- ios开发小技巧之提示音播放与震动
在ios开发中,有时候我们需要频繁播放某种提示声音,比如微博刷新提示音.QQ消息提示音等,对于这些短小且需要频繁播放的音频,最好将其加入到系统声音(system sound)里. 注意: 需要播放的音 ...
- 【转】IOS开发小技巧
1,Search Bar 怎样去掉背景的颜色(storyboard里只能设置background颜色,可是发现clear Color无法使用). 其实在代码里还是可以设置的,那就是删除背景view [ ...
- iOS开发小技巧--字典和数组的中文输出
一.在解析json数据的时候,得到的集合对象或者数组对象在用%@打印的时候回出现类似乱码的情况.如图: 在iOS中打印字典或者数组对象,系统会默认调用字典对象和数组对象的descriptionWith ...
- ios开发小技巧(转)
1.通过下面方式可以获取图片的像素颜色点:- (void*)getImageData:(UIImage*)image{ void* imageData; if (imageData == ...
- iOS开发小技巧--相机相册的正确打开方式
iOS相机相册的正确打开方式- UIImagePickerController 通过指定sourceType来实现打开相册还是相机 UIImagePickerControllerSourceTypeP ...
- iOS开发小技巧--iOS键盘 inputView 和 inputAccessoryView
iOS键盘 inputView 和 inputAccessoryView 1.inputAccessoryView UITextFields和UITextViews有一个inputAccessoryV ...
随机推荐
- iOS学习36数据处理之SQLite数据库
1. 数据库管理系统 1> SQL语言概述 SQL: SQL是Structured Query Language(结构化查询语言)的缩写.SQL是专为数据库而建立的操作命令集, 是一种功能齐全的 ...
- Ferry Loading III[HDU1146]
Ferry Loading IIITime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- oracle中利用trigger,sequence自动生成ID
http://zhanghong.iteye.com/blog/865937 1. 首先创建数据库表 SQL> create table customer( 2 id number(8) no ...
- 20145304 刘钦令 Java程序设计第二周学习总结
20145304 <Java程序设计>第2周学习总结 教材学习内容总结 java可区分基本类型和类类型(即参考类型)两大类型系统. 基本类型主要可区分为整数.字节.浮点数.字符与布尔. 整 ...
- Leetcode Median of Two Sorted Arrays
There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted ...
- 2分钟 windows下sublime text 3安装git插件:
12:35 2015/11/182分钟 windows下sublime text 3安装git插件:推荐博客:http://blog.csdn.net/naola2001/article/detail ...
- 【JAVA】JAVAMail使用属性资料
核心提示:Session需要使用 java.util.Properties来构造,常用的用来构造Session的属性: mail.smtp.user SMTP的缺省用户名. mail.smtp.hos ...
- 在配置IIS负载均衡时,引起的一系列问题
问题一: IIS中要上传文件的路径是另一台服务器的地址(如:本机IP是192.168.0.100,文件保存的路径在://192.168.0.101/images/folder),在上传时抛出异常: A ...
- jquery插件之文字间歇自动向上滚动
该插件乃本博客作者所写,目的在于提升作者的js能力,也给一些js菜鸟在使用插件时提供一些便利,老鸟就悠然地飞过吧. 此插件旨在实现目前较为流行的文字间歇向上滚动特效,当鼠标移动到文字上时,向上滚动会停 ...
- call与apply基础用法告诉你
Js用法中还有个极好的但是有些抽象的用法——call与apply,今天我要简单总结一下: var ob1={ //对象ob1 name:"ob1", func1:function( ...