说真的,很久没有开发项目了,得有半年了,最近公司开发了一个项目,项目比较简单,要求独立开发8天完成。完成的还算比较顺利,但是中间还是遇到了一些坑坑。一些坑都是之前遇到过的,结果又百度了一遍,不得不承认最近状态不好,记忆力明显下降。所以在此记录一下,加强一下记忆。
公司开发的项目就是一个简单的问答系统。
问题: 使用hidesBottomBarWhenPushed,push后又pop结果状态栏和导航栏都变色了。从view debug上面看好像是里面有一层黑色。
解决办法: 原来是因为没有给UIWindow设置一个背景色,添加背景色为白色后问题解决。
问题: 设置UITableViewAutomaticDimension后在iOS9和iOS10的系统上面cell缩成了一团。
解决办法:iOS系统版本号≤10的系统,必须设置estimatedRowHeight才可以,可以直接设置给tableview也可以在代理实现返回estimatedRowHeight的方法。
问题:用计时器更新button上的秒数时闪烁 解决办法:把button的类型改成custom,默认是system
直接写注意事项吧。下面是注意事项
-
safeArea是iOS11的新特性,用xib开发界面时可以直接以safeArea为参照进行布局。在iOS11和iOS12的系统上可以正常显示。由于safeArea中不包含状态栏,如果view的top和safeArea的top一样,那么在iOS11和12的系统上会从状态栏下面开始。在iOS10及以下版本上,top依然会从屏幕顶部开始。这样一来iOS10的系统就会向上偏移20个点。可以在代码中判断版本号手动修改约束值。
-
写九宫格显示图片的时候,用UICollection的子类实现,给UICollection设置图片的时候,会根据图片数量修改自身高度约束。之前我为了减少耦合,让UICollection自己去遍历自己的高度约束,这样性能太差了,而且引起了cell高度显示不准确。后来干脆直接从xib中拉一根线赋值给UICollection,不要让UICollection和蒙头苍翼一样去到处找了。这样性能提高了,cell高度也正常了。
关于controller跳转时候navigationBarHidden的问题
####情景如下
A页面是根页面,有导航栏
B页面没有导航栏
想由A push 到B 侧滑手势失效。
总结:
- 使用 [self.navigationController setNavigationBarHidden:YES animated:NO];
会隐藏导航,并且手势消失 - 使用 self.navigationController.navigationBar.hidden = YES;
隐藏导航栏手势可用,但是会导致push的过度效果不好看。 - 针对1的情况,可以在B页面这样设置来启用手势。需要让self实现UIGestureRecognizerDelegate,可以不用实现具体方法。
self.navigationController.interactivePopGestureRecognizer.delegate = self;
最大的坑
以前做的项目上传图片要么是用的阿里云要么就是用post只传一张图片给后台,就是直接把图片的data数据赋值给HTTPbody。非常简单。
这次要求上传图片的时候还带有一个业务参数,这可把我难倒了,我记得之前我就对这种方式有抵触,但是太懒了,一些生活琐事也让我无心专心学习。但是这次遇上了不得不解决。
最后通过查资料得知HTTPbody的数据有格式,通过boundary进行参数分割。最后我用AFNetworking封装好的下面这段代码实现了需求。
AFHTTPSessionManager *manage = [AFHTTPSessionManager manager];
[manage.requestSerializer setValue:@"application/multipart/form-data" forHTTPHeaderField:@"Content-Type"];
manage.requestSerializer = [AFHTTPRequestSerializer serializer];
manage.responseSerializer = [AFHTTPResponseSerializer serializer];
manage.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/html", @"text/json", @"text/javascript",@"text/plain", nil];
[manage POST:self.URL.absoluteString parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
//业务参数imageType的值是2
[formData appendPartWithFormData:[@"2" dataUsingEncoding:NSUTF8StringEncoding] name:@"imageType"];
//把图片通过参数imageFile传给后台
[formData appendPartWithFileData:self.formData name:@"imageFile" fileName:@"a.jpg" mimeType:@"image/jpeg"];
} progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
BCRequestResponseModel *model = [BCRequestResponseModel modelWithJSON:responseObject];
completion(model,nil);
NSLog(@"%@",responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
completion(nil,error);
}];