iOS开发技术点总结(二)

42.使用shareSDK分享到微博的时候,如果想使用微博客户端分享,则添加如下代码即可:

//允许使用微博客户端分享

[shareParams SSDKEnableUseClientShare];

SSUIShareActionSheetController *sheet = [ShareSDK showShareActionSheet:nil

items:nil shareParams:shareParams onShareStateChanged:^(SSDKResponseState state, SSDKPlatformType platformType, NSDictionary *userData, SSDKContentEntity *contentEntity, NSError *error, BOOL end) {

switch (state) {

case SSDKResponseStateSuccess:

NSLog(@"分享成功!");

break;

case SSDKResponseStateFail:

NSLog(@"分享失败!");

break;

case SSDKResponseStateCancel:

NSLog(@"取消分享!");

break;

default:

break;

}

}];

//加了这个方法之后可以不跳分享编辑界面,直接点击分享菜单里的选项跳转到微博客户端

[sheet.directSharePlatforms addObject:@(SSDKPlatformTypeSinaWeibo)];

了解详情见该链接下的第三条

小技能ps:想要分享一个url到微博,而且还想附加上图片,如果你此时没有安装微博客户端,而且你把要分享的url写到了url参数中,并设置分享类型为网页,那么分享的时候会报错,导致分享不成功;解决办法是:把要分享的url写在text里面,微博会自动处理将你的url设为链接(分享类型改为SSDKContentTypeAuto)。

43.让imageView自适应图片自身的比例

imageView.contentMode = UIViewContentModeScaleAspectFit;

44.tableview滚动到指定位置

NSIndexPath * lastCell = [NSIndexPath indexPathForRow:0 inSection:5];

[tableViews scrollToRowAtIndexPath:lastCell atScrollPosition:UITableViewScrollPositionTop animated:YES];

45.获取线上版本号

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; [manager POST:@"https://itunes.apple.com/lookup?id=1160657486" parameters:nil success:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) {

NSArray *array = responseObject[@"results"]; NSDictionary *dict = [array lastObject]; NSLog(@"当前版本为:%@", dict[@"version"]);

} failure:^(AFHTTPRequestOperation * _Nullable operation, NSError * _Nonnull error) {

}];

46.iOS 8之后侧滑(左滑)方法进行了改进具体方法是:

- (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath{

// 添加一个删除按钮

UITableViewRowAction *deleteRowAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"删除" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {

// 先移除数据源数据

[self.dataArray removeObjectAtIndex:indexPath.row];

// 再动态刷新UITableView

[self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationTop];

NSLog(@"删除按钮");

}];

UITableViewRowAction *topRowAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal title:@"置顶" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {

NSLog(@"置顶按钮");

}];

/// 设置按钮颜色,Normal默认是灰色的,Default默认是红色的

topRowAction.backgroundColor = [UIColor orangeColor];

UITableViewRowAction *cancelRowAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal title:@"取消关注" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {

NSLog(@"取消关注按钮");

}];

return @[deleteRowAction,topRowAction,cancelRowAction];

}

使用该方法时注意:该方法只会在ios9之后的版本中才会有效,如果想在ios8以及ios8之前起作用的话必须额外加上下面这个代理方法:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath

{

//方法内可以什么都不写,但必须加上,否则侧滑不起作用!!!

}


49.iPhone X的屏幕navigationBar高度和statusBar高度和它之前的区别

iPhone X之前的苹果:

navigationBar的frame为(0,20,screenWidth,44), statusbar的高度为20;

iPhone X:

navigationBar的frame为(0, 44, screenWidth, 44), statusbar的高度为44。

50.上拉加载更多回调调用多次的问题:

这种问题一般会出现在cell的高度是自适应高度的情况下,而且当前运行的手机系统为ios11!

总结其上拉的主要问题的原因是 tableViews :在iOS 11中默认启用Self-Sizing

这个应该是UITableView最大的改变。我们知道在iOS8引入Self-Sizing 之后,我们可以通过实现estimatedRowHeight相关的属性来展示动态的内容,实现了estimatedRowHeight属性后,得到的初始contenSize是个估算值,是通过estimatedRowHeight 乘以 cell的个数得到的,并不是最终的contenSize,只是当前屏幕能够显示的cell个数,滑动时,tableView不停地得到新的cell,更新自己的contenSize。

Self-Sizing在iOS11下是默认开启的,Headers, footers, and cells都默认开启Self-Sizing,所有estimated 高度默认值从iOS11之前的 0 改变为UITableViewAutomaticDimension:

如果目前项目中没有使用estimateRowHeight属性,在iOS11的环境下就要注意了,因为开启Self-Sizing之后,tableView是使用estimateRowHeight属性的,这样就会造成contentSize和contentOffset值的变化,如果是有动画是观察这两个属性的变化进行的,就会造成动画的异常,因为在估算行高机制下,contentSize的值是一点点地变化更新的,所有cell显示完后才是最终的contentSize值。因为不会缓存正确的行高,tableView reloadData的时候,会重新计算contentSize,就有可能会引起contentOffset的变化。

iOS11下不想使用Self-Sizing的话,可以通过以下方式关闭:

//添加以下代码就能解决你的问题

self.tableView.estimatedRowHeight =0;

self.tableView.estimatedSectionHeaderHeight =0;

self.tableView.estimatedSectionFooterHeight =0;

注意️:这种问题未使用上面解决办法而使用以下这种方法,只能解决留白问题,反而导致上拉刷新回弹问题

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{

return nil;

}

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{

return nil;

}

总结:经测试最容易出现问题的是iOS11 plus机型,用出现问题的机型从App Store重新下载之前版本并不会出现问题,这些问题出现都是由于Xcode9运行iOS11所造成的。

参考文章:点我点我

51.automaticallyAdjustsScrollViewInsets(默认为YES,iOS 11之后弃用了该方法,改为contentInsetAdjustmentBehavior)

Specifies whether or not the view controller should automatically adjust its scroll view insets.

@property(nonatomic, assign) BOOL automaticallyAdjustsScrollViewInsets

Discussion

Default value isYES, which allows the view controller to adjust its scroll view insets in response to the screen areas consumed by the status bar, navigation bar, and toolbar or tab bar. Set toNOif you want to manage scroll view inset adjustments yourself, such as when there is more than one scroll view in the view hierarchy.

Availability

Available in iOS 7.0 and later.

Declared In

UIViewController.h

大体意思为:当当前试图控制器的屏幕中存在导航条、状态栏、工具栏和tabbar的时候,自动布局它的scrollview,这种自动调整是在ScrollView是其视图添加的的第一个控件的时候,才会出现自动调整的效果,如果在添加ScrollView之前添加了其他控件,不论控件的frame,自动调整都会失效。

ios11之后为何弃用该方法?猜测:automaticallyAdjustsScrollViewInsets是当前试图控制器的点方法,相对于scrollview本身的contentInsetAdjustmentBehavior方法来说不够灵活,contentInsetAdjustmentBehavior可以对每个scrollview进行设置。

52.第三方登录之微信登录获取unionid

如果你用到了shareSDK或者友盟第三方登录,网上有人说需要再调用微信提供的方法

https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID

其实不需要,只需要在回调里拿到 NSLog(@"unionid:%@",user.credential.rawData[@"unionid"]);就可以。(shareSDK例子)

53.获取section指定行的frame

NSIndexPath *index = [NSIndexPath indexPathForRow:0 inSection:section];

UICollectionViewLayoutAttributes* attr = [self.rightCollectionView.collectionViewLayout layoutAttributesForSupplementaryViewOfKind:UICollectionElementKindSectionHeader atIndexPath:index];

NSLog(@"该行frame:%@",NSStringFromCGRect(attr.frame));

54.关于按钮和label

1、如果把按钮的userInteractionEnabled设为NO,那么按钮的点击事件无响应;默认为YES;

2、如果把按钮的userInteractionEnabled设为NO,即使未声明该按钮的方法,程序执行时,点击按钮也不会崩溃;

3、如果在一个label上添加点击手势,然后把label的userInteractionEnabled设为NO,那么不会触发手势;默认为NO;

55.关于runtime的交换方法实现

如果一个工程中有多个地方给label或者其他系统类添加catogry,并且交换了系统类的同一个方法实现,如果两个catogry交换后的方法名是一样的,例如控制器的catogryA交换了控制器的方法viewDidLoad改为sd_viewDidLoad,然而控制器的catogryB也交换了控制器的方法viewDidLoad改为sd_viewDidLoad,这时候系统就不会执行你自己写的交换的方法实现;但是如果改了其中一个方法的名字,比如A的或者B的方法改为了sd_viewDidLoad之外的其他方法名,那么这两个方法系统都会去执行(先后顺序未探索)。

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

推荐阅读更多精彩内容