iOS7适配之设计篇
(注:文章简要翻译自 Apple 《iOS 7 UI Transition Guide》,由于该文档为开发者预览版,并非最终文档,所以 iOS7 正式上线可能有部分不同)
准备工作
iOS7 带来了很多界面上的改变,如:没有边框(圆角)的按钮,半透明的工具条(UINavigationBar, UIToolBar 等),视图控制器的全屏布局等。使用 Xcode5,你就可以创建 iOS7 工程,并在 iOS7 模拟器中看看 iOS7 的界面。
UIStyle
从 iOS7 系统应用的改变可以看出,iOS7 这次改变不是小打小闹,是彻彻底底的变化。苹果认为之前的 UI 风格辨识度很高,但是视觉体验太不一致(comment: 你们换个设计师,我们苦逼的程序员就得按照你的审美来修改、适配)。
Note: 尽管 iOS7 所有的界面元素都看起来不一样,可能增加了新的功能,但是之前你所熟悉 UIKit APIs 的大多都是一样的。
随着你对 iOS7 继续的研究,你可能发现 iOS7 界面风格几个特点:
- 尊重内容 用户界面帮助用户了解内容,并与之交互,而不是为了界面而忽略了内容。(comment: 你们之前做拟物化风格时,怎么没意识到内容的重要性?)
- 清晰 文本在不同的字体大小下都是清晰可读的,图标也是能清晰的表达意思,不需要过多的修饰。功能指导设计,而不是相反(comment: 这一点我还是比较认同的,可悲的是当前公司在这方面有点误入歧途呢)。
- 深度 视觉上的层次分明和逼真的手势操作可以加强用户愉悦和理解。
为了将上面这些基本的原则融入到 iOS 的体验中,iOS7 抓住了这样的机会重新定义了程序要传达给用户的核心目标和功能。虽然你可能还没有完全准备好马上利用这样的修改你的设计,但是只要你准备为 iOS7 升级或开发你的应用时,你就需要按照上面的指导原则来做。
适配讨论
是否使用 Auto Layout 来设计 App
如果你的程序现在使用了 Auto Layout,那么你的适配工作就相对简单一些。因为 iOS7 与之前版本在界面元素上有很多属性设置都不一样,而且 iOS7 所有应用程序内的字体大小都是随着系统字体可调整的,所以如果使用了 Auto Layout 就会比较方便一些。
如果你还没有用 Auto Layot,建议你现在就开始使用,特别是如果你需要同时支持不同的系统版本。如果你完全使用代码布局,你就必须在字体大小改变时做相应的处理。
(comment: 晕,从最开始的 XIB,到 Auto Layout 和 Storyboard,我都没用过,你看看 Github 上有多少代码使用了。相信广大程序员都更喜欢纯代码布局,首先纯代码比较清晰,不用对照这布局文件和源文件看,其次纯代码复用和修改方便,相信我还会将纯代码进行到底的。)
是否需要支持 iOS6
iOS 用户通常都会很快的就会将手中的设备升级到最新的系统,他们希望看到他们喜爱的应用能够很好适配。
如果出于商业原因,你的应用必须支持 iOS6,那你也最好能够同时升级支持 iOS7。
(comment: 公司才在 iPhone5 推出后不得不放弃 4.3 以下的设备,以前都是支持 3.0 的有木有? 现在你就讨论 iOS6 要不要支持,有本事你又弄个版本不兼容,要么支持 iOS7,要么支持以下版本啊。我估计只要技术允许,我们都必须支持到最大的范围)
通常你的应用可以分为几类:
标准 应用完全只使用 UIKit 提供的控件,没有自己定制。(comment: 这种应该应该只有系统自带的“设置”吧,哈哈)
自定义 应用完全使用自定义的 UI,没有使用 UIKit 中的元素。(comment: 这种应用应该也不多吧,除非哪个牛逼的公司能够完整的开发出一套自己的 UI 组建)
混合 应用中使用了 UIKit 中的控件,也依赖 UIKit 自定义了自己的控件。(comment: 我相信几乎所有的应用应属于这一类)
第一种和第二种,如果不是设计风格上与 iOS7 的指导原则不一致,基本代码就能够不用修改在 iOS7 上运行。第三种,呵呵,自己看着办吧(估计广大 iOS 程序员又得熬几个通宵去适配了)。
适配 Checklists
Must Do
更新程序图标 (Icon),iOS7 中程序 icon 是 120 x 120 像素。(comment: 不明白又没有出新分辨率的设备,只是升级系统,icon 的像素为什么要变?)
更新程序启动画面 (Launch image), 程序启动图片必须包含状态条。(comment: 这个我们一直就带着状态条的,之前高出的 20 像素现在能露脸了,哈)
支持高清屏(Retina display)和 iPhone5。(comment: 怎么现在看到 Retina 屏我会笑而不语呢,在 Android 满大街都是 1920 x 1080 的现在,你那点分辨率也还叫高清屏?)
Should Do
确保程序内容在半透明的 UI 控件下能够很好的显示——如工具条和键盘或半透明的状态条。
重新设计工具条上按钮的图标。
开始使用没有边框和圆角的按钮,移除之前设置的按钮背景图片。
检查程序内硬编码设置的 UI 属性值,如大小和位置。替换成系统提供的可能动态修改的值,推荐使用 Auto Layout 来布局。
检查程序中 UI 控件修改可能引起的布局或显示问题,如 UISwitch 更宽了,grouped UITableView 没有边距了,UIProgressView 更细了。
适配动态属性,在 iOS7 中,用户能够自己调整字体大小,你的程序必须做出调整。
检查一下你的程序内所使用的手势,确保别和 iOS7 中新增的控制中心所用的手势冲突,还有 NavigationController 滑动返回的手势。 (comment: 应该很多程序会躺枪)
去掉程序中用到的阴影、渐变、不规则形状吧,iOS7 的设计美学强调扁平化和分层。
确保程序中没有使用被 iOS7 废弃调的 API。
其他
附上官方推荐的用于版本判断的代码供参考
NSUInteger DeviceSystemMajorVersion();
NSUInteger DeviceSystemMajorVersion() {
static NSUInteger _deviceSystemMajorVersion = -1;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_deviceSystemMajorVersion = [[[[[UIDevice currentDevice] systemVersion]
componentsSeparatedByString:@"."] objectAtIndex:0] intValue];
});
return _deviceSystemMajorVersion;
}
#define MY_MACRO_NAME (DeviceSystemMajorVersion() < 7)

UI 变化举例
UIViewController
wantsFullScreenLayout
被废弃,新增edgesForExtendedLayout
,extendedLayoutIncludesOpaqueBars
,automaticallyAdjustsScrollViewInsets
等属性来控制视图控制器的布局。
UIView
新增tintColor
属性,默认继承自父视图, 原来工具条(Bar)的 tintColor 属性改成了barTintColor
。
字体
通过 UIFont 中的preferredFontForTextStyle
属性回去当前系统的字体,确保内容在不同字体下都能很好显示。
Bars 和 Bar Buttons
status bar 默认是透明的,其他 bar 都是半透明的,一个通用原则:确保内容填充 Bar 下面的区域。
navigationBar 在UIBarPositionTopAttached
模式下会与 status bar 融合的,所以如果使用图片需要用 128px((20 + 44) x 2)。
UITableView
Grouped table 没有边距了,TableView 上的图标(如:Checkmark,Disclosure indicator,Delete button 等)都变了。
(comment: 就举这么多吧,反正这次是侧头侧尾的改变,每一个控件都需要研究, 没有完全安装原文翻译,可能会有地方翻译得恰当,请赐教!)
====== 全文完 ======
Posted by XiaoYi_HD - 6月 11 2013
如需转载,请注明: 本文来自 Esoft Mobile
iOS7适配之设计篇的更多相关文章
- jQuery2.x源码解析(设计篇)
jQuery2.x源码解析(构建篇) jQuery2.x源码解析(设计篇) jQuery2.x源码解析(回调篇) jQuery2.x源码解析(缓存篇) 这一篇笔者主要以设计的角度探索jQuery的源代 ...
- 我所理解的RESTful Web API [设计篇]
<我所理解的RESTful Web API [Web标准篇]>Web服务已经成为了异质系统之间的互联与集成的主要手段,在过去一段不短的时间里,Web服务几乎清一水地采用SOAP来构建.构建 ...
- (转)Android Binder设计与实现 – 设计篇
原文地址(貌似已打不开):Android Binder设计与实现 – 设计篇 ------------------------------------------------------------- ...
- ios7适配一些问题以及64位32位
ios7适配一些问题(http://www.cocoachina.com/ios/20130703/6526.html) 1.iOS应用如何实现64位的支持 http://www.codeceo.co ...
- 谈谈项目中遇到的各种iOS7适配问题
由于我的项目要适配到iOS7.1, 而现在已经是9时代了,在实际工作中我也是遇到了各种奇葩的坑,所以我想尽快把遇到的iOS7适配问题和解决方案分享出来,以后这些东西可能就用处不大了. 1.字体问题 i ...
- iOS7适配问题
iOS7适配问题 2013-09-28 08:32:37 我来说两句 作者:冻僵的企鹅 收藏 我要投稿 iOS 7发布了,适配问题来了,开发者都忙起来了. 先记一个iOS7 的 ...
- .NET Core实战项目之CMS 第七章 设计篇-用户权限极简设计全过程
写在前面 这篇我们对用户权限进行极简设计并保留其扩展性.首先很感谢大家的阅读,前面六章我带着大家快速入门了ASP.NET Core.ASP.NET Core的启动过程源码解析及配置文件的加载过程源码解 ...
- .NET Core实战项目之CMS 第十章 设计篇-系统开发框架设计
这两天比较忙,周末也在加班,所以更新的就慢了一点,不过没关系,今天我们就进行千呼万唤的系统开发框架的设计.不知道上篇关于架构设计的文章大家有没有阅读,如果阅读后相信一定对架构设计有了更近一部的理解,如 ...
- 电子技术经典资料汇总:PCB设计篇
电子技术经典资料汇总:PCB设计篇,下面的链接是一个一个的文件下载的,也是压缩包的内容,只不过我把他们给汇总成了一个压缩包,方便大家下载,还有更多电子技术必备基础资料,通信无线类的,C语言篇的,关于电 ...
随机推荐
- iOS 的 Gif 渲染引擎 FLAnimatedImage-b
公司的项目有个首页加载一张2M左右的git图,刚做的时候是使用的SDWebImage里面的方法: + (UIImage *)sd_animatedGIFNamed:(NSString *)name; ...
- linux驱动系列之makefile
在linux环境下做嵌入式无论是编写应用程序还是驱动程序等等,都需要用make来进行程序的编译,就需要学会自己编写Makefile.Makefile主要的作用有3点:1.决定编译哪些文件 2.怎样编译 ...
- springMVC+MyBatis+Spring 整合(4) ---解决Spring MVC 对AOP不起作用的问题
解决Spring MVC 对AOP不起作用的问题 分类: SpringMVC3x+Spring3x+MyBatis3x myibaits spring J2EE2013-11-21 11:22 640 ...
- 在TNSNAMES.ORA文件中配置本机装的oracle
首先,感谢这两位网友:http://zhidao.baidu.com/link?url=eGYeoEa-EhQdVitSGqjE36uNfVmEsryXH1WUjPue6YvArDSx-Y1N9_rd ...
- [转载]jquery tmpl使用方法
动态请求数据来更新页面是现在非常常用的方法,比如博客评论的分页动态加载,微博的滚动加载和定时请求加载等. 这些情况下,动态请求返回的数据一般不是已拼好的 HTML 就是 JSON 或 XML,总之不在 ...
- docker 通过commit方法创建镜像(Tomcat+Java+Scala)
前一阵试了试写Dockerfile创建docker image,但有时全靠Dockerfile写实在有些难度,退而求其次试一试使用commit来创建镜像: 想了想干脆创建一个Java+Scala+To ...
- fiddler 插件开发
本文主要讲解使用.net C#语言开发Fiddler插件. 1.在Fiddler 会话列表中添加自定义列 使用FiddlerApplication.UI.lvSessions.AddBoundColu ...
- Injection Attacks-XML注入
注入攻击 XML注入 虽然JSON的出现实现了服务器与客户端之间的"轻量级"数据交流,但是,作为另一种流行的可行方案,许多web服务API同时还是继续支持XML.另外,除了web服 ...
- HDU 1203 I NEED A OFFER!(01 背包DP)
点我看题目 题意 : 中文题不详述. 思路 :类似于01背包的DP,就是放与不放的问题,不过这个要求概率,至少得到一份offer的反面就是一份也得不到,所以先求一份也得不到的概率,用1减掉就可以得到所 ...
- 关于PYTHON的反射,装饰的练习
从基本概念,简单例子才能慢慢走到高级一点的地方. 另外,PYTHON的函数式编程也是我很感兴趣的一点. 总体而言,我觉得OOP可以作大的框架和思路,FP能作细节实现时的优雅牛X. ~~~~~~~~~~ ...