WWDC 2017 刚过去不久,新增了一些好东西,特别在硬件方面,在软件方面也有一些需要我们知道的东西,自己就怀着好奇心下载了 Xcode9.0-beta版本和手机版iOS 11,体验了几天内有几点自己的看法。
- Xcode9-beta版本比之前的beta 版本较稳定,在体验上还是比较满意的。
- 新改变的模拟器风格还是比较好看的,但是切换不同模拟器的时候之前打开的模拟器不会关闭,如打开很多模拟器 command + q退出的话就一键退出了,比较不喜欢。
- iOS 11 beta 版本(iPhone 6 Plus)用起来比较卡顿,切换应用的时候会出现闪动。在大屏上字体超大。
- 实际项目中存在着各种各样的bug,将在本文最后做些介绍。
在苹果官网上其实已经有本次大会所新增的东西,不管是硬件方面还是软件方面,有兴趣的同学可以去体验下。苹果开发者文档
新增框架
Core ML : 作为机器学习模型转换为 iOS 可以开发的方式。
ARKit :iOS 11 SDK 新增框架。
Xcode 编译器
Swift在OC和Swift混编上,编译器运行速度有点慢,但是Xcode9 编译速度上有所提升。在其中的编译器上进行了重写,支持了对 Swift 代码的重构,使用Swift重写的,并添加了GitHub的集成。如图所示:
从左侧可以看出GitHub上主次分支,右侧分支代码提交的详细信息,开发者可以较快浏览项目进度。
自定义NameColor
在 Assets.xcassets 图片管理可以自定义颜色,在xib 或者storyboard选择颜色的时候可以看到自己自定义的 NameColor 如图所示:
Navigation Title
Navigation Title (iOS 11 之后) 采用了新的设计,放大了字体,prefersLargeTitles为true即可。
拖拽功能
UITextView,UITextField,UICollectionView,UITableView 支持原生拖拽。具体参考 苹果API。
Other Bug
ps:iOS 11适配可参考简书App适配iOS 11,可以解决这些bug。感谢 @爱睡觉的蘑菇的分享
在使用 xcode9.0 - beta 版本发现一些不正常的小 “错误”:
- 自定义 Navigation Bar 返回按钮,space.width = -20 负号失效,如以下用法:
UIButton *gradeRuleButton = [UIButton buttonWithType:UIButtonTypeCustom];
[gradeRuleButton setImage:[UIImage imageNamed:@"gradeRule"] forState:UIControlStateNormal];
gradeRuleButton.frame = CGRectMake(0,0, 40, 40);
gradeRuleButton.backgroundColor = [UIColor yellowColor];
gradeRuleButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
[gradeRuleButton addTarget:self action:@selector(gradeButtonAction:) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:gradeRuleButton];
UIBarButtonItem *space = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
space.width = - 20; 此处 -20将失效为0
self.navigationItem.leftBarButtonItems = @[space,leftBarButtonItem];
- UITableView Group模式下,分区的时候,若设置某一区高度为固定值10,只需执行以下代码即可:
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
return 10;
}
在新编译器还必须执行以下自定义HeaderView方法才可生效。
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
UIView *header = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 10)];
header.backgroundColor = [UIColor redColor];
return header;
}
参考链接:王巍(喵神)