(注:文章简要翻译自 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适配之设计篇的更多相关文章

  1. jQuery2.x源码解析(设计篇)

    jQuery2.x源码解析(构建篇) jQuery2.x源码解析(设计篇) jQuery2.x源码解析(回调篇) jQuery2.x源码解析(缓存篇) 这一篇笔者主要以设计的角度探索jQuery的源代 ...

  2. 我所理解的RESTful Web API [设计篇]

    <我所理解的RESTful Web API [Web标准篇]>Web服务已经成为了异质系统之间的互联与集成的主要手段,在过去一段不短的时间里,Web服务几乎清一水地采用SOAP来构建.构建 ...

  3. (转)Android Binder设计与实现 – 设计篇

    原文地址(貌似已打不开):Android Binder设计与实现 – 设计篇 ------------------------------------------------------------- ...

  4. ios7适配一些问题以及64位32位

    ios7适配一些问题(http://www.cocoachina.com/ios/20130703/6526.html) 1.iOS应用如何实现64位的支持 http://www.codeceo.co ...

  5. 谈谈项目中遇到的各种iOS7适配问题

    由于我的项目要适配到iOS7.1, 而现在已经是9时代了,在实际工作中我也是遇到了各种奇葩的坑,所以我想尽快把遇到的iOS7适配问题和解决方案分享出来,以后这些东西可能就用处不大了. 1.字体问题 i ...

  6. iOS7适配问题

    iOS7适配问题 2013-09-28 08:32:37     我来说两句      作者:冻僵的企鹅 收藏    我要投稿 iOS 7发布了,适配问题来了,开发者都忙起来了. 先记一个iOS7 的 ...

  7. .NET Core实战项目之CMS 第七章 设计篇-用户权限极简设计全过程

    写在前面 这篇我们对用户权限进行极简设计并保留其扩展性.首先很感谢大家的阅读,前面六章我带着大家快速入门了ASP.NET Core.ASP.NET Core的启动过程源码解析及配置文件的加载过程源码解 ...

  8. .NET Core实战项目之CMS 第十章 设计篇-系统开发框架设计

    这两天比较忙,周末也在加班,所以更新的就慢了一点,不过没关系,今天我们就进行千呼万唤的系统开发框架的设计.不知道上篇关于架构设计的文章大家有没有阅读,如果阅读后相信一定对架构设计有了更近一部的理解,如 ...

  9. 电子技术经典资料汇总:PCB设计篇

    电子技术经典资料汇总:PCB设计篇,下面的链接是一个一个的文件下载的,也是压缩包的内容,只不过我把他们给汇总成了一个压缩包,方便大家下载,还有更多电子技术必备基础资料,通信无线类的,C语言篇的,关于电 ...

随机推荐

  1. iOS 的 Gif 渲染引擎 FLAnimatedImage-b

    公司的项目有个首页加载一张2M左右的git图,刚做的时候是使用的SDWebImage里面的方法: + (UIImage *)sd_animatedGIFNamed:(NSString *)name; ...

  2. linux驱动系列之makefile

    在linux环境下做嵌入式无论是编写应用程序还是驱动程序等等,都需要用make来进行程序的编译,就需要学会自己编写Makefile.Makefile主要的作用有3点:1.决定编译哪些文件 2.怎样编译 ...

  3. springMVC+MyBatis+Spring 整合(4) ---解决Spring MVC 对AOP不起作用的问题

    解决Spring MVC 对AOP不起作用的问题 分类: SpringMVC3x+Spring3x+MyBatis3x myibaits spring J2EE2013-11-21 11:22 640 ...

  4. 在TNSNAMES.ORA文件中配置本机装的oracle

    首先,感谢这两位网友:http://zhidao.baidu.com/link?url=eGYeoEa-EhQdVitSGqjE36uNfVmEsryXH1WUjPue6YvArDSx-Y1N9_rd ...

  5. [转载]jquery tmpl使用方法

    动态请求数据来更新页面是现在非常常用的方法,比如博客评论的分页动态加载,微博的滚动加载和定时请求加载等. 这些情况下,动态请求返回的数据一般不是已拼好的 HTML 就是 JSON 或 XML,总之不在 ...

  6. docker 通过commit方法创建镜像(Tomcat+Java+Scala)

    前一阵试了试写Dockerfile创建docker image,但有时全靠Dockerfile写实在有些难度,退而求其次试一试使用commit来创建镜像: 想了想干脆创建一个Java+Scala+To ...

  7. fiddler 插件开发

    本文主要讲解使用.net C#语言开发Fiddler插件. 1.在Fiddler 会话列表中添加自定义列 使用FiddlerApplication.UI.lvSessions.AddBoundColu ...

  8. Injection Attacks-XML注入

    注入攻击 XML注入 虽然JSON的出现实现了服务器与客户端之间的"轻量级"数据交流,但是,作为另一种流行的可行方案,许多web服务API同时还是继续支持XML.另外,除了web服 ...

  9. HDU 1203 I NEED A OFFER!(01 背包DP)

    点我看题目 题意 : 中文题不详述. 思路 :类似于01背包的DP,就是放与不放的问题,不过这个要求概率,至少得到一份offer的反面就是一份也得不到,所以先求一份也得不到的概率,用1减掉就可以得到所 ...

  10. 关于PYTHON的反射,装饰的练习

    从基本概念,简单例子才能慢慢走到高级一点的地方. 另外,PYTHON的函数式编程也是我很感兴趣的一点. 总体而言,我觉得OOP可以作大的框架和思路,FP能作细节实现时的优雅牛X. ~~~~~~~~~~ ...