1、UICollectionView
(1)设置header悬浮效果
在iOS9.0后UICollectionView的头部视图也能像tableView的header一样利用系统api设置出现悬浮挂住的效果。(iOS8及之前需要重写UICollectionViewFlowLayout。)
UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
//header
flowLayout.sectionHeadersPinToVisibleBounds = YES;
//footer
flowLayout.sectionFootersPinToVisibleBounds = YES;
(2)dataSource、delegate已设置,collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath 方法仍不调用
解决方法:
self.automaticallyAdjustsScrollViewInsets = NO;//解决cellForItemAtIndexPath not called问题
2.xcode Jump to Definition 点击对象跳转
方法一:在XCode9之前,在变量或方法上, 按CMD+单击, 是直接Jump to Definition,但是现在, 是弹出这个菜单, 对于跳转到变量的定义,就多了一步了,开始可能会觉得不方便 对于想直接跳转到变量定义,现在是 control+command+单击, 也可以:
鼠标用户: 对准你的对象,Command+鼠标右键
触摸板用户: 对准你的对象, Command+双指点击
方法二:偏好设置中设置

3.折叠代码
全局折叠(折叠当前文件下的全部函数): Shift+Command+Option+Left/Right
折叠方法:Command+Option+Left/Right
4.Folder和Group的同步问题
在此之前,我们在XCode中,更改Folder的名字,在FInder中工程对应的文件夹的名字并不会同步的改变,这会造成我们重命名文件夹变得非常不方便,最终要先在XCode中移除,然后在Finder中重命名,再添加回Xcode
现在 在Xcode9中重名命Folder,Finder中的也同步的改变了 我们之前建议一个虚拟的group,并不会在对应的文件夹中建立真实的目录
Xcode9中,默认行为改变了, 变成了会建立对应的真实文件夹, 如果你需要像之前那样只是建立虚拟的group, 选择New Group without Folder 即可!

参考:https://blog.csdn.net/qq_31810357/article/details/78060505
5、屏幕截图
(1)截取当前屏幕内容
- (UIImage *)snapshotScreenInView{
// 判断是否为retina屏, retina屏绘图时有放大因子
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]){
UIGraphicsBeginImageContextWithOptions(self.view.window.bounds.size, NO, [UIScreen mainScreen].scale);
} else {
UIGraphicsBeginImageContext(self.view.window.bounds.size);
}
[self.view.window.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// 保存到相册
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
return image;
}
(2)截取contentView
//可以选择一个view进行截图
- (UIImage *)snapshotScreenInView:(UIView *)contentView {
CGSize size = contentView.bounds.size;
UIGraphicsBeginImageContextWithOptions(size, NO, [UIScreen mainScreen].scale);
CGRect rect = contentView.frame;
// 自iOS7开始,UIView类提供了一个方法-drawViewHierarchyInRect:afterScreenUpdates: 它允许你截取一个UIView或者其子类中的内容,并且以位图的形式(bitmap)保存到UIImage中
[contentView drawViewHierarchyInRect:rect afterScreenUpdates:YES];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
return image;
}
6、OC打印arc下的retaincount
id obj = [[NSObject alloc]init];
printf("retain count = %ld\n",CFGetRetainCount((__bridge CFTypeRef)(obj)));
需要注意的是,这里要用__bridge来转换,如果用__bridge_retained来转换的话,实际上,生成了一个Core Foundation对象,并且retain了一次原来的Objective-C对象,造成引用计数比真实值大一。
7、百度地图相关
1)百度地图在iOS中类似安卓语义化的搜索结果
反向地理编码回调里的反地理编码结果类BMKReverseGeoCodeSearchResult中有个属性
(实测结果不准确,不如安卓)
结合当前位置POI的语义化结果描述
@property (nonatomic, copy) NSString *sematicDescription;
//反向地理编码回调
-(void) onGetReverseGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKReverseGeoCodeSearchResult *)result errorCode:(BMKSearchErrorCode)error{}
8、prefs:root 上架被拒问题
9、AFNetWorking 获取statusCode
参考
2.0的方法
operation.response.statusCode == 500
3.0的方法:
//post
+ (void)httpPostRequest:(NSString *)url Parameters:(NSDictionary *)params WithSuccess:(void (^)(id result))success failure:(void (^)(NSError *error))failure statusCode:(void (^)(NSInteger statusCode))statusCode
{
AFHTTPSessionManager *manager = [self manager];
[manager POST:url parameters:params success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) {
/*注意:这里要强转下*/
NSHTTPURLResponse * responses = (NSHTTPURLResponse *)task.response;
statusCode(responses.statusCode);
NSLog(@"1111111111111111:%ld", responses.statusCode );
success(responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
if (failure) {
failure(error);
}
}];
10、iOS开发AFN3.0中json解析获取error自己解析
因为后台原因,如果请求失败,返回的error错误信息是AFN中默认json解析数据
+ (void)requestUrlStr:(NSString *)urlStr
parameters:(NSDictionary * _Nullable)parameters
success:(nullable void (^)(id _Nullable responseObject))success
failure:(void (^ _Nullable)(NSInteger errorCode))failure{
AFHTTPSessionManager *sessionManager = [AFHTTPSessionManager manager];
sessionManager.responseSerializer = [AFJSONResponseSerializer serializer];
sessionManager.requestSerializer = [AFJSONRequestSerializer serializer];
NSString *postUrl = [NSString stringWithFormat:@"%@?%@",urlStr,[HeadInfo getHeadInfo]];
[sessionManager POST:postUrl parameters:parameters progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
if (responseObject) {
success(responseObject);
}else{
NSHTTPURLResponse *response = (NSHTTPURLResponse *)task.response;
success([NSString stringWithFormat:@"%ld",(long)response.statusCode]);
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSHTTPURLResponse *response = (NSHTTPURLResponse *)task.response;
NSData *data = error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey];
NSDictionary *errorInfo = nil;
if (data != nil) {
errorInfo = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
//NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"error--%@", errorInfo);
}
failure((errorInfo[@"errorCode"]?[errorInfo[@"errorCode"] integerValue]:response.statusCode));
}];
}
网友评论