ios 统一设计,iOS6也玩扁平化

转:http://esoftmobile.com/2014/01/14/build-ios6-ios7-apps/

前言


前段时间,苹果在它的开发者网站上放出了iOS系统安装比例,其中iOS7占到78%,iOS6占18%,剩余4%是iOS6以下版本。我们也借此机会将手上正在进行的两个项目都升级到支持iOS6及以上版本呢,有一种幸福来的太突然的赶脚,要知道在此之前我们都还在支持iOS4.3版本。

根据苹果另外一条消息,我们需要按照iOS7风格设计我们的Apps,至于iOS6系统,也没有必要为这部分用户做两份设计,尽量向iOS7风格靠齐吧。由于iOS7简约的风格,基本上通过设置组件的颜色就能够满足大部分色设计需求,所以本文的主要内容会讲iOS6实现iOS7扁平化的一些技巧。

iOS6扁平化

这部分我们主要讲解在iOS6上实现扁平化,各个控制怎么设置。并且大部分通过各个控件 UIAppearance 协议做全局性的设置。

辅助

我们通常要判断不同的系统版本,我是通过下面的宏进行判断的:

#define IOS7_OR_LATER ([[[UIDevice currentDevice] systemVersion] compare:@"7.0"] != NSOrderedAscending)

由于很多地方iOS7可以直接设置颜色,而iOS6却只能设置图片,所以可以使用下面方法直接通过颜色生成一个纯色的图片:

+ (UIImage *)imageWithColor:(UIColor *)color size:(CGSize)size
{
CGRect rect = CGRectMake(0, 0, size.width, size.height);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();

CGContextSetFillColorWithColor(context, [color CGColor]);
CGContextFillRect(context, rect);

UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}


布局


iOS7中界面会从屏幕的(0, 0)点开始绘制,所以默认情况下你的内容通常会和 statusBar 和 navigationBar
冲突,如果为了省事的话,或者你的 NavigationBar 和 TabBar压根儿就不透明,那你可以直接给 viewController
edgesForExtendedLayout 属性值为:UIRectEdgeNone。当然你如果想体现iOS7内容为主的风格,也想将内容显示在半透明的
Bar 下,那你可以严格判断系统版本调整布局了。通常建议将 edgesForExtendedLayout 设置为
UIRectEdgeBottom,这样如果ViewController中为 tableView 或 scrollView 时,内容可以显示到半透明的
tabBar 下,工作量也不是很大。

UINavigationBar

在iOS7风格中,导航栏通常是一个纯色的背景颜色,直接设置 barTintColor 就行,而iOS6中,给导航栏设置tintColor,系统也会默认加上渐变,不够扁平,所以只能设置背景图片了:

//iOS6
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageWithColor:navigationBarColor size:CGSizeMake(1, 44)]
forBarMetrics:UIBarMetricsDefault];

导航栏 title 的颜色也不同,iOS7默认为黑色,而iOS6默认为白色,而且字体大小也不一样,所以还是统一设置标题字体大小、颜色,并去掉文字阴影:

//Universal
[[UINavigationBar appearance] setTitleTextAttributes:
@{ NSForegroundColorAttributeName: [UIColor whiteColor],
NSFontAttributeName: [UIFont boldSystemFontOfSize:20],
UITextAttributeTextShadowOffset: [NSValue valueWithUIOffset:UIOffsetZero]}];

iOS7中导航栏上的按钮已经不被圆角按钮包围了,而iOS6中不管你怎么设置 UIBarButtonItem
的 style 属性都去不掉讨厌的 border,可能很多人会想通过创建 CustomView 类型的
button,其实不用那么麻烦:

//iOS6
[[UIBarButtonItem appearance] setBackgroundImage:[UIImage new]
forState:UIControlStateNormal
barMetrics:UIBarMetricsDefault];

可以看看完成上面三步达到的效果:

 

有人会说,你别高兴得太早,那导航栏的返回按钮怎么办?能去掉iOS6上带剪头和圆角的border吗?这个都搞不定,我还敢在这儿发文章显摆吗?看码:

//iOS6
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:[[UIImage imageNamed:@"buttonItem_back"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 18, 0, 0)]
forState:UIControlStateNormal
barMetrics:UIBarMetricsDefault];

[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(5, 0)
forBarMetrics:UIBarMetricsDefault];

[[UIBarButtonItem appearance] setTitleTextAttributes:
@{ UITextAttributeFont: [UIFont systemFontOfSize:17],
UITextAttributeTextShadowOffset: [NSValue valueWithUIOffset:UIOffsetZero]} forState:UIControlStateNormal];


第一段代码给返回按钮设置一个背景图片,当然这个背景图片就做成和iOS7返回按钮那个剪头一样就好了,  可能文字和剪头靠的太紧,没关系,通过 setBackButtonTitlePositionAdjustment: 设置一下文字的偏移就好了,最后因为iOS6中
BarButtonItem 中的文字比 iOS7 小,所以统一设置一下吧。

 

UITabBar

和 NavigationBar 一样,iOS6中给 TabBar
设置 tintColor 也不够扁平,还是老老实实设置背景图片,并去掉 Tab 选中时的高光效果:

//iOS6
[[UITabBar appearance] setBackgroundImage:[UIImage imageWithColor:RGB(245, 245, 245) size:CGSizeMake(1, 49)]];

[[UITabBar appearance] setSelectionIndicatorImage:[UIImage new]];


iOS6中 Tab 选中后,图片默认会加上高光效果,title默认为白色,而iOS7中默认为选中后图片和文字默认都变为 TabBar 的
tintColor 颜色,所以这里的处理方法是准备两套 tabBarItem
的图标,默认状态和选中状态,iOS7直接调用initWithTitle: image: selectedImage:方法初始化
tabBarItem,iOS6在初始化后,再通过setFinishedSelectedImage:
withFinishedUnselectedImage:
方法设置默认状态和选中状态下的图标,我通常会给UITabBarItem 增加一个分类,新增一个统一的初始化方法:

@implementation UITabBarItem (Universal)
+ (instancetype)itemWithTitle:(NSString *)title image:(UIImage *)image selectedImage:(UIImage *)selectedImage
{
UITabBarItem *tabBarItem = nil;
if (IOS7_OR_LATER) {
tabBarItem = [[UITabBarItem alloc] initWithTitle:title image:image selectedImage:selectedImage];
} else {
tabBarItem = [[UITabBarItem alloc] initWithTitle:title image:nil tag:0];
[tabBarItem setFinishedSelectedImage:selectedImage withFinishedUnselectedImage:image];
}
return tabBarItem;
}
@end

标题单独设置:

//iOS6
[[UITabBarItem appearance] setTitleTextAttributes:
@{ UITextAttributeTextShadowOffset: [NSValue valueWithUIOffset:UIOffsetMake(0, 0)],
UITextAttributeTextColor: tabBarTintColor }
forState:UIControlStateSelected];

 

UIToolbar

UIToolbar 和 UINavigationBar 相似,建议通过设置背景图片,上面的 item 和 NavigationBar 的 item
设置通用。

UISegmentControl

像 UISegmentControl 通过自定义或者第三方控件,很容易实现 iOS6 和 iOS7 一致风格,如果你就想用系统的控件让 iOS6 实现
iOS7 的风格也不是没有办法。我们可以设置 segment 部分选中状态和非选中状态下的背景图片,segment 之间的分割线图片。因为 iOS6 上
UISegmentControl 的 title 字体比 iOS7 上大,也可以一并做一下修改:

//iOS6
[[UISegmentedControl appearance] setBackgroundImage:[UIImage imageWithColor:selectedColor size:CGSizeMake(1, 29)]
forState:UIControlStateSelected
barMetrics:UIBarMetricsDefault];

[[UISegmentedControl appearance] setBackgroundImage:[UIImage imageWithColor:normalColor size:CGSizeMake(1, 29)]
forState:UIControlStateNormal
barMetrics:UIBarMetricsDefault];

[[UISegmentedControl appearance] setDividerImage:[UIImage imageWithColor:selectedColor size:CGSizeMake(1, 29)]
forLeftSegmentState:UIControlStateNormal
rightSegmentState:UIControlStateSelected
barMetrics:UIBarMetricsDefault];

[[UISegmentedControl appearance] setTitleTextAttributes:@{
UITextAttributeTextColor: selectedColor,
UITextAttributeFont: [UIFont systemFontOfSize:14],
UITextAttributeTextShadowOffset: [NSValue valueWithUIOffset:UIOffsetMake(0, 0)] }
forState:UIControlStateNormal];

[[UISegmentedControl appearance] setTitleTextAttributes:@{
UITextAttributeTextColor: normalColor,
UITextAttributeFont: [UIFont systemFontOfSize:14],
UITextAttributeTextShadowOffset: [NSValue valueWithUIOffset:UIOffsetMake(0, 0)]}
forState:UIControlStateSelected];


通过 appearance 只能到这里了,还差 border 和 小圆角。 鉴于
UISegmentControl 设置还需要每个控件单独设置,所以还是推荐封装一下。

if (!IOS7_OR_LATER) {
self.segmentControl.layer.borderColor = selectedColor;
self.segmentControl.layer.borderWidth = 1.0f;
self.segmentControl.layer.cornerRadius = 4.0f;
self.segmentControl.layer.masksToBounds = YES;
}

 

结束

就写这么多吧,如果没有找到你想拍扁的控件,自己动手吧,如果你懒,那就去 GitHub 上找找吧 :]

时间: 2024-10-16 08:27:36

ios 统一设计,iOS6也玩扁平化的相关文章

扁平化设计

扁平化概念的核心意义是:去除冗余.厚重和繁杂的装饰效果.而具体表现在去掉了多余的透视.纹理.渐变以及能做出3D效果的元素,这样可以让“信息”本身重新作为核心被凸显出来.同时在设计元素上,则强调了抽象.极简和符号化. 例如:Windows.Mac OS.iOS.Android等操作系统的设计已经往“扁平化设计”发展.其设计语言主要有Material Design.Modern UI等. 扁平化的设计,尤其是手机的系统直接体现在:更少的按钮和选项,这样使得UI界面变得更加干净整齐,使用起来格外简洁,

扁平化设计发展

[PConline 欣赏]现在说起网页.UI设计,都会谈论扁平化设计(Flat Design)这个概念,一些大型公司和组织在网页设计都将风格偏向了它,而iOS 7又推上了一个高峰. 在苹果与微软的青睐与推动下,扁平化设计日益盛行,但是很少有人知道扁平化设计这个概念由何而来?为什么将这个概念用在了网页设计上?对于设计的新概念来说,搞清楚一个风格和一项技术的历史背景很重要,因为在我们觉得是否采用这个新的设计概念的时候,对它来由的了解可以帮助我们做出更明智的决定. 到底什么是扁平化设计? 对于那些从来

扁平化设计的历史

[摘要]"扁平化设计"是一种设计风格术语,它抛弃任何能使得作品突显3D效果的特性. 如今一提到网站设计,就会不可避免地碰到"扁平化设计"(flat design)这个词.近几年扁平化设计趋势风生水起,也受到很多大公司的青睐. 但扁平化设计来源是哪里?为什么它风靡网站设计?在设计中,我们只有知道一种风格和技术的来源以及它背后的历史,我们在使用这种美学风格时才能更加得心应手.下面让我们追根溯源,了解扁平化设计的前世今生. 究竟什么是扁平化设计 对于没接触过的人来说,&q

扁平化设计的优势

目前,在市场上的视觉设计中,扁平化的设计的占比在持续上升,这其中究竟藏着有什么样的秘密,今天就来一起探讨一下吧. 首先,研究一样东西,我觉得都要从它的历史开始,因为可以了解它,并且清楚知道它的变化在哪里. 一.扁平化的开始和发展 在很多国内的人的心里,对扁平化的认识估计就是从微软的WINDOWS 8 和 WINDOWS PHONE 等界面开始,而后苹果的产品中也开始使用这样扁平化的视觉设计,由于微软和苹果产品在市场上的占比比较高,因此也一定程度上推动了整个移动端扁平化的设计进程. 二.扁平化的定

扁平化设计的流行配色方案

扁平化设计的流行配色方案 扁平化设计从2012年开始就已经流行起来,我觉得flat design有点类似极简主义设计,同样是追求简洁.简约,不同的是,扁平化设计是一项运用简单效果,或者是刻意进行一个不使用三维效果的设计方案.一个好的扁平化设计必然不可能出现阴影.浮雕和渐变等效果. 扁平化设计看上去非常简单.直观,并且使用方便,所以在手机界面和网页设计中变得越来越受欢迎. 让我们来学习一下,如何进行扁平化设计吧. 什么是扁平化设计?<探讨扁平化设计之美><使用扁平化设计的网页设计欣赏>

扁平化设计:赶一种叫“简约”的时髦

人可以说是一种受感官支配的动物,我们被食物的香味吸引,被悦耳的音乐吸引,更容易吸引我们的是透过视觉看到的东西.因此人也可以说是一种视觉动物,我们很容易通过视觉来判断很多的东西,美丑甚至是善恶.再进一步来说,色彩是抓住我们视觉的核心. 互联网技术发达的今天,我们打开电脑.手机就能看到许多的网站.应用,最先吸引我们的应该不是它们的性能而是色彩.因此对于网站设计来说,界面色彩的设计也是不得马虎的重要环节. 说到设计,扁平化设计应该算是现下的设计热门词,无论是一个网站还是一个应用程序,扁平化和极简的设计

扁平化设计五大原则

扁平化设计五大原则 摘要:这段时间以来,扁平化设计一直是设计师之间的热门话题.那什么是扁平呢?designmodo设计师Carrie Cousins总结扁平化的五大特点,并且介绍了“准”扁平化设计理念及其优缺点. 这段时间以来,扁平化设计一直是设计师之间的热门话题.每个人都有自己的独特认识,有的非常喜欢而有的人却恰恰相反.那什么是扁平呢? designmodo设计师Carrie Cousins在网站上介绍了扁平化的五大特点,以及“准”扁平化设计的优缺点.CSDN编译如下. Cousins表示他虽

扁平化设计与配色方案Flat UI

这篇文章将展示很多很酷的范例,甚至还提供了一个免费的用户界面工具包供你下载和使用.但如果是你自己的话,你打算怎么做?给点提示,色彩是扁平化趋势中最重要的一部分. 扁平化设计进修 扁平化设计你可以通俗的理解为:使用简单特效,或者无特效来创建的设计方案,它不包含三维属性.诸如投影.斜面.浮雕.渐变等特效都不要在设计中使用. 扁平化设计给人的感觉通常都很简洁,即使它可以做的很复杂.简单.直接.友好的特性也使得它广受移动界面和时尚网站设计的青睐. 想了解更多扁平化设计趋势,可以看之前的这篇文章.分享一个

抓住“扁平化”

谈到设计,无论是一个网站还是一个应用程序,扁平化和极简的设计已经成为新的趋势.越来越多的网站设计在UI上走扁平化设计的路线,"扁平化设计"已是当下网页设计的流行趋势.那么,如何让自己融入到这个流行趋势中去? 首先,小编就说说什么是扁平化设计.扁平化完全属于二次元,这个概念最核心的地方就是放弃一切装饰效果,诸如阴影,透视,纹理,渐变等等能做出3D效果的元素一概不用.所有的元素的边界都干净利落,没有任何羽化,渐变,或者阴影.尤其在手机上,更少的按钮和选项使得界面干净整齐,使用起来格外简洁.