本文转自App升级iOS7体会。html
xcode5 GM版已经发布,虽然仍是pre-release版,但离最终版不远了。对于没有用到新特性的app面临的最大问题就是UI的变化。Apple提供了UI Transition Guide给开发者,本来打算翻译一下,没想到国内早就有译文了(唉~看来NDA对于某些人而言,等于NULL)。 鉴于此,这里侧重于Apple提供的cheklist以及app在升级过程当中遇到的问题。ios
扁平化的设计已经“流传”了好久,iOS7上标准控件(UIKit)有了翻天覆地的变化:按钮没有边,状态栏透明,导航栏变半透明,alert/progress/picker彻底是新的表现形式等等。固然,库也更新了很多。印象最深的就是试图控制器中view的尺寸是全屏:即view的尺寸是320×480,包含了顶部的status bar。这一点之因此深入,是由于以前作过view全屏和非全屏之间的切换。在iOS7里,全屏应该更容易实现。 Apple推出xcode5后,有可能4在不久的未来不能再发布App。在最近这段时间须要说明的是:用xcode4打包的App在iOS7上运行除了alert/preogress等控件是iOS7的样子,其余仍是旧的形式。xcode
Apple宣称iOS7的设计遵循三大主题:app
在(重)设计App前,还须要考虑:ide
ps:Apple彷佛只为开发者“考虑”了ios6上App的升级,不知道还有不少地方的人还在为4.3,5.x的系统奋斗! 为了更好的区分App类型,从使用控件的角度,Apple将App分红三种类型:wordpress
标准型的话,须要作的修改可能相对少一点,可是由于iOS7的变化太大了,仍是会有“莫名”的问题:布局
这些问题经过文档都能比较容易的解决,标准型App升级主要遇到的是:布局,对于交互方面的修改升级不会太大。 对于非标准型控件来讲,我以为最大的问题就是风格要和系统协调(说了句废话)。这主要仍是设计师费神的事情了,我和设计师沟通的结果就是认为App的配色须要好好修改,你们仁者见仁,智者见智吧。测试
如下就是Apple提供的cheklist。字体
从checklist能够看出Apple此次推陈出新的力度很大,个人感受是之后的App最低只要适配iOS6,可是对于天朝不知道5.x以及之前的系统用户占比有多大了。还有,之后的开发必定要使用autolayout还有sb。在iOS7新建工程的模版里已经没有xib了,都是默认sb,还有都是默认ARC。动画
Apple所指的实际上是支持ios7前的系统,只不过他“眼里”如今只有ios6了。这里列举的方法,对于5.x的系统大部分也是使用的
在Assitantor模式下,xcode5提供给开发者ios7和ios7前两种布局,只要点击preview(如图),右下角能够点击切换
ios7引入了Asset Catalog来更好的管理图片,这个会专门说。
这个之前版本升级的时候也遇到过,就是更新的时候有些API不用了,可是老系统里还能使用,这时须要区分系统了。
if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) { // Load resources for iOS 6.1 or earlier} else { // Load resources for iOS 7 or later}
这里按照Apple文档的脉络,挑选那些我遇到的问题。
最主要变化就是view是320×480的尺寸。使用 wantsFullScreenLayout 的须要改过来,不然这个在iOS7上会有错误。下面分带bar和不带bar的情形,说一下layout须要注意的地方。
1带有nav bar:
若是按以前的frame将y设置为0,有可能subview会被bar挡住。若是要是subview加在bar底的话能够经过设置:
self.edgesForExtendedLayout = UIRectEdgeNone;
这样就能够了,在viewDidAppear里你能够发现,view的frame已经去掉了bar占用的高度了。
此外,iOS7中的nav bar默认是带透明的。可是若是选择了非透明的bar呢?这时,viewcontroller的view会默认去掉bar和statu bar的高度。可是这时,若是想让view的尺寸全屏又该如何呢。这时只要设置:
self.extendedLayoutIncludesOpaqueBars = YES;
这个属性的英文自己解释得很到位了,就很少说了。
2不带有nav bar:
这时statu bar不管如何都是占据掉20的高度,因此subview的布局须要计算在内。
此外,UIViewController还添加了automaticallyAdjustsScrollViewInsets, topLayoutGuide/bottomLayputGuide等属性。有须要的能够自行测试
ios6,bar的tintcolor使用tintColor;ios7则要使用barTintColor(ios7里bar的tintcolor用于设置BarButtonitem)。对于支持多个iOS的App,须要区分。此外,UIView新添加了tintColor的属性。若是给window设置tintcolor:
self.window.tintColor = [UIColor redColor];
那么,nav bar上的按钮颜色会变成红色。若是view没有设置这个属性(一般为nil),那么默认使用父view的tintColor。对于顶层的window,tintColor是由系统定义的。须要提醒的是不能经过appearence的方式来设置tintColor。
听说使用Dynamic Type后,能够
在iOS7中,用户能够设置字体大小到本身认为合适的地方。若是程序想响应这种变化的话:
UIContentSizeCategoryDidChangeNotification
Notificationios7新添了在runtime的时候,指定动做失败的delegate。Apple举例说明:系统自己有从下向上显示控制中心的功能,那么在App里若是view也添加了这样的手势操做,那么能够在delegate里动态设置为nil从而先响应系统的。
Apple文档中剩下的部分,详细阐述了一些控件,control,和view的变化,文档里附有详细的异同比较并有图例。这里就再也不一一赘述了。
我我的从中学到的:
2013-09-13