项目开发中所遇到的问题总结(不定期更新......)

1.Plain类型的 UITableView 隐藏多余 cell 的分割线问题

//隐藏多余的 cell 的分割线
self.mainTableView.tableFooterView = [[UIView alloc] init];
//然后可以向 tableView 的背景颜色设置为 clearColor

2.判断当前ViewController是push还是present的方式显示的

NSArray *viewcontrollers = self.navigationController.viewControllers;
if (viewcontrollers.count > 1){
    if ([viewcontrollers objectAtIndex:viewcontrollers.count - 1] == self){
        //push方式
       [self.navigationController popViewControllerAnimated:YES];
    }
}else{
    //present方式
    [self dismissViewControllerAnimated:YES completion:nil];
}

3.启动图问题

优先级:LaunchScreen > LaunchImage
在xcode 中设置启动图的时候不起作用;
1.清空 xcode 的缓存;
2.直接删掉程序直接运行;

注意:如果是通过LaunchImage设置启动界面,那么屏幕的的可视范围由图片决定;因此如果使用LaunchImage作为启动图片必须让美工提供所有尺寸的启动图片;

LaunchScreen是在 xcode6之后才出来的; LaunchScreen的好处:1.自动识别当前真机的或者模拟器的尺寸;
2.只让美工提供一个可拉伸的图片即可;
3.展示更多东西;

LaunchScreen的底层实现:把LaunchScreen截屏,生成一张图片作为启动图片;

4. iOS之用NSTimer定时刷新按钮的文字,避免按钮闪烁的办法

解决方法:
将UIButton的类型由system改为custom就OK拉!

5.UIAppearance使用注意

1.UIAppearance:只有遵守这个协议,才能拿到全局的;
2.并不是所有属性都能通过UIAppearance设置,必须要有UI_APPEARANCE_SELECTOR这个宏才可以设置;
3.UIAppearance最好在显示之前使用,否则没有效果.一般在+ loaddata( )方法中调用;
4.一般不直接使用:[UITabBarItem appearance]这个方法,因为没有遵循自己的东西自己管理的原则;直接调用这个方法的时候是设置全局的样式,容易引发一些其他问题;因此一般调用这个方法:[UITabBarItem appearanceWhenContainedIn:self, nil],这样可以达到只修改当前类中的样式;
使用场景:夜间模式

6.UIScrollView的约束添加注意事项

在 AutoLayout 中,所有的间距类约束并非是相对于父控件本身的,而是先对控件的内容视图的(如: UIScrollView 的 ContentSize); 由于普通的 view 的内容视图与本身的大小是一样的,所以可以看成相对于 view 本身;但是 UIScrollView 在加载的时候,会自动根据内部子控件来计算 ContentSize 的值;
宽高类的约束是相对于 view 本身的, 并非相对于它的内容视图的,所以相对于 scrollview 的来说, 其本身的 view 的宽高有多大就有多大,与 ContentSize 的大小无关;

7.自定义 UITabBar 的时候注意事项

在自定义 TabBar 的时候添加子控制器的时候要使用 self.viewControllers = @[nav1,nav2,nav3,nav4];
如果使用 [self addChildViewController:nav];添加的话还是会生成系统的 TabBar;

8.iOS10新特性

1.证书设置问题。
2.RGB到sRGB的转变,UIColor多增加两个方法。提高了对扩展像素和宽色域色彩空间的支持。
3.系统文件的访问设置变化。系统隐身数据访问问题。
4.系统版本判断方法失效。
5.真彩色的显示。
6.字体的变化,iOS10字体变大。
7.UIStatusBar设置问题。
8.UICollectionView生命周期的变化和性能的优化,新增一个代理协议,两个代理方法。
9.UIRefreshControl脱离控制器,直接是UIScrollView的一个属性。
10.UITextField添加contenttype字段。
11.debug输出不相关信息。
12.通知中心的整体API变化。

9.UITableView的plain样式下,取消区头停滞效果

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    CGFloat sectionHeaderHeight = sectionHead.height;
    if (scrollView.contentOffset.y<=sectionHeaderHeight&&scrollView;.contentOffset.y>=0){
        scrollView.contentInset = UIEdgeInsetsMake(-scrollView.contentOffset.y, 0, 0, 0);
    }else if(scrollView.contentOffset.y>=sectionHeaderHeight){
        scrollView.contentInset = UIEdgeInsetsMake(-sectionHeaderHeight, 0, 0, 0);
    }
}

10.isKindOfClass和isMemberOfClass的区别

isKindOfClass 方法内部会先去获得object_getClass的类,而object_getClass的源码实现是去调用当前类的obj_getIsa(),最后在ISA()方法中获得meta class的指针,接着在isKindOfClass 中有一个循环,先判断class是否等于meta class,不等就继续循环判断是否等于super class,不等再继续取super class,如此继续遍历;

isMemberOfClass的源码实现是拿到自己的ISA指针和自己比较是否相等;

11. 遍历不定长的数据, 比如 (NSString *)buttonTitles, ... 和AlertView最后的一个参数一样.

if (buttonTitles) {
    NSMutableArray *buttons = [NSMutableArray array];
    va_list argList;
    va_start(argList, buttonTitles);
    for (id str = buttonTitles; str != nil; str = va_arg(argList, id)) {
        UIButton *button = [[UIButton alloc] init];
        [button setTitleColor:[UIColor colorWithWhite:1 alpha:0.5] forState:UIControlStateNormal];
        [button setTitleColor:[UIColor whiteColor] forState:UIControlStateSelected];
        [button setBackgroundImage:nil forState:UIControlStateSelected];
        [button setTitle:(NSString *)str forState:UIControlStateNormal];
        [button addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];
        [self addSubview:button];
        [buttons addObject:button];
    }
    va_end(argList);
}

12. 异常捕获

在APPDelegate中 NSSetUncaughtExceptionHandler (&UncaughtExceptionHandler);
实现 void UncaughtExceptionHandler()方法

void UncaughtExceptionHandler(NSException *exception) {
    NSArray *arr = [exception callStackSymbols];//得到当前调用栈信息
    NSString *reason = [exception reason];//非常重要,就是崩溃的原因
    NSString *name = [exception name];//异常类型
    NSLog(@"exception type : %@ \n crash reason : %@ \n call stack info : %@", name, reason, arr);
}

13.使用CoacoaPod的问题

在使用Cocoapod之前,项目中的第三方都是手动导入的,加入Cocoapods后我首先把原来项目中的Masonry删掉了,然后通过pod来导入,导入后编译没有任何问题,但是运行后立刻Crash,错误是UI控件找不到Masonry中的方法unrecognized selector sent to instance xxxxxx,而方法确实是存在的。
后来找到的解决方法是:

1、打开工程所在文件夹,找到.xcodeproj文件,右键选择【显示包内容】,找到project.pbxproj文件
2、打开project.pbxproj文件,查找OTHER_LDFLAGS,把和这个相关的内容都删除
4、重新编译并运行

14.使用CATextLayer编辑文字的时候,文字显示模糊的问题

使用contentsScale属性可以让其显示不模糊;

textLayer.contentsScale = [UIScreen mainScreen].scale;

15.在xcode控制台中输入lldb命令时不输出的问题

问题描述

 Stopped in a context claiming to capture an Objective-C object pointer, but 'self' isn't available

解决办法:
设置项目工程中的Precompile Prefix Header的为NO即可;

16.UICollectionViewCell点击不走代理方法注意点:

在cell上面添加button的时候容易拦截点击事件从而引起cell不走点击的代理;

17.bitcode导致的编译错误linker command failed with exit code 1 (use -v to see invocation)

有些第三方库不支持bitcode所以编译会报错;在项目设置中将bitcode关闭即可;(有时可能模拟器可以但是真机不可以);

18.当两个数相除分母为0的时候其结果等于nan;

19.在使用view的缩放的时候,layer.border.width随着view的放大,会出现锯齿化的问题,解决这个问题需要设置这个属性。

self.layer.allowsEdgeAntialiasing = YES;

20. 打印应用启动时间

对于pre-main阶段,Apple提供了一种测量方法,在 Xcode 中 Edit scheme -> Run -> Auguments 将环境变量DYLD_PRINT_STATISTICS 设为1 ;打印启动时间;

21.iOS中系统导航手势返回右上角有黑色背景问题解决

UITabBarController的view的背景颜色设置为白色即可;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,598评论 18 139
  • 问题有摘自http://ayjkdev.top/2016/03/18/solve-questions/ 问题排序 ...
    乱尘阅读 2,002评论 0 0
  • 今天是打鸡血的一天,上午朋友一个公司谈要怎么设定目标进行绩效管理的推进。刚好谈到尾声,一个电话跟我说是本来应该今天...
    foxgrace阅读 415评论 2 2
  • 留一丝牵挂还情郎,取万分思念入梦乡。亦幻亦真,难舍易深。像镜中花,似水里月。心系千里,眼穿万丈,只盼青丝满头至霜生...
    阿梦生阅读 221评论 1 1
  • 第二十八页,大神们都在忙,是他们在专注自己觉得重要的事情,他们不觉得累,只是我们在瞎操心!这句话读完了真的是心有感...
    学晶阅读 134评论 0 0