新近。我进行了项目iOS7适应,它有没有用7.0SDK它是由于老project采用iOS7.0存在一些问题,以这个机会,我专门整理改编iOS7需要注意的几个地方。

记录,如下面:

一,iOS7 UITableViewCell适配

(1)iOS7 UITableViewCell背景色

在iOS7之前UITableViewCell的backgroundColor是透明的,但在iOS7中默认白色背景,假设使用iOS7 SDK的UITableViewCell显示不正常,仅仅须要需改动:

[cell setBackgroundColor:[UIColor clearColor]];

(2)iOS7 UITableViewCell层次关系

iOS7之前。遇到UITableViewCell上的UIButton子视图找到该UITableViewCell时。或许会有这种代码: [[sender superview] superview]

这段代码在iOS7上肯定会崩溃。

iOS7曾经,我们通常是把视图加入到UITableViewCell的contentView上。contentView的父视图是UITableViewCell,上面的代码是没有问题的。但在iOS7上。UITableViewCell的contentView的父视图是UITableViewCellContentView[SDK中好像没有这个类的具体介绍]。所以 [[sender superview] superview]就找不到UITableViewCell。

对UiscrollView不明白的看IOS研究之滚动视图UIScrollView的简单应用

实际上这里的正确做法应该是:

在继承UITableView的类中实现UIButton的触发方法:


1
2
3
4
5
6
-(void)buttonClick:(UIButton
*)button{  
    CGPoint buttonPosition
= [button
convertPoint:CGPointZero
toView:self];  
    NSIndexPath *indexPath
= [self
indexPathForRowAtPoint:buttonPosition];  
    UITableViewCell *cell
= (UITableViewCell *)[self
cellForRowAtIndexPath:indexPath];  
    //do  something  
}  

二,iOS7 UIViewController适配

最大的变化是UIViewController默认都是全屏显示的。

(1)导航栏高度

iOS7之前导航栏高度为44,iOS7是全屏布局。导航栏高度包含了状态栏高度20变成了64。假设不适配状态栏就会把导航栏遮住。

(2)edgesForExtendedLayout

有例如以下取值

UIRectEdgeNone   = 0,

UIRectEdgeTop    = 1 << 0,

UIRectEdgeLeft   = 1 << 1,

UIRectEdgeBottom = 1 << 2,

UIRectEdgeRight  = 1 << 3,

UIRectEdgeAll

这个值仅仅在当前视图有navigationBar或者tabBar时有效,假设是自己定义的navigationBar/tabBar。这个值是不起作用的。它标示从上下左右方向页面延伸,也就是导航栏页面也算在视图显示的部分。iOS7默认是全屏布局。取值就是UIRectEdgeAll。

假设之前是通过iOS 6.0SDK编译的,预计就要改成

self.edgesForExtendedLayout = UIRectEdgeNone才干在iOS 7上显示没有问题。

同理的还有[都是在有navigationBar/tabBar时有效]。

self.extendedLayoutIncludesOpaqueBars = NO;

指定了当Bar使用了不透明图片时。视图是否延伸至Bar所在区域。默认值时NO。

所以我们假设自己定义了导航栏的背景图片,那么视图会从导航栏下面開始,不会延伸到导航栏区域。

self.modalPresentationCapturesStatusBarAppearance = NO;

self.tabBarController.tabBar.translucent = NO;

self.navigationController.navigationBar.translucent = NO;//设置导航栏半透明效果

(3)automaticallyAdjustsScrollViewInsets

第一个加入到UIViewController上的UIView,如UIScrollView(包含其子类。比方UITableVie)等会自己主动在顶部和底部预留一些空白,主要是为了滚动经过半透明导航条或者tabbar下是能看到的半透明的效果。是否预留空白能够由UIViewController的automaticallyAdjustsScrollViewInsets的这个属性控制。

三,iOS7 状态栏

涉及状态栏操作的XXX-info.plist属性有例如以下几个:

Status bar style

Status bar is initially hidden

Status bar tinting parameters

View controller-based status bar appearance

当中Status bar is initially hidden,Status bar style(tekuba.net測试好像在iOS6上不起作用)分别标示全局的设置:状态栏是否隐藏。以及状态栏的风格。

相应着的代码各自是:

[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:NO];

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

普通情况下。我们希望程序启动时隐藏状态栏而程序启动完毕进入前台后显示状态栏,这个时候就能够设置plist文件的Status bar is initially hidden为YES。先隐藏状态栏,然后在didFinishLaunchingWithOptions方法中设置:

[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:NO]显示状态栏。

1,iOS7曾经不能针对每个UIViewController单独控制状态栏的显示隐藏,仅仅能在须要的时候调用setStatusBarHidden/setStatusBarStyle改动状态栏显示或者样式

2。iOS7以后。状态栏是透明的。

plist參数多了一个View controller-based status bar appearance。

假设View controller-based status bar appearance为NO。则标示状态栏不受UIViewController的单独控制,那么这个时候状态栏的控制还和iOS7曾经的方式一样,在须要改动的地方运行setStatusBarHidden。

而假设设置为YES。则状态栏会依据各个UIViewController的配置改变,UIViewController中假设须要改变状态栏则须要重载下面两个方法:

- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;//状态栏样式
}

- (BOOL)prefersStatusBarHidden
{
return NO;//状态栏是否隐藏
}

1
2
3
4
5
6
7
8
9
-
(UIStatusBarStyle)preferredStatusBarStyle  
{  
    return
UIStatusBarStyleLightContent;//状态栏样式  
}  
  
- (BOOL)prefersStatusBarHidden  
{  
    return
NO;//状态栏是否隐藏  
}  

UIViewController初始化的时候会自己主动运行这个两个方法,之后假设须要刷新状态栏样式的时候。调用[self setNeedsStatusBarAppearanceUpdate]就可以,系统会自己主动调用这两个方法。

四,详细实施

假设是使用了系统自带的导航栏和标签栏,则依照以上设置基本上就会没有问题。假设是自己定义的导航栏和标签栏,须要做些小修改:

//推断是否ios7

#define isIOS7  ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7)

#define NAV_HEIGHT ( isIOS7 ?

64 : 44)  //导航栏高度

#define NAV_HEIGHT_NO_STATUSVIEW 44  //导航栏高度-不包括状态栏

#define NAV_START_Y (NAV_HEIGHT – NAV_HEIGHT_NO_STATUSVIEW)//导航栏绘制时的起始Y值

创建windows时

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

在使用时创建自己定义的导航栏高度为NAV_HEIGHT,绘制自己定义视图的開始Y坐标为NAV_START_Y。

另外在一些地方或许还须要加上:

if (isIOS7) {
self.automaticallyAdjustsScrollViewInsets = NO;
}
1
2
3
if
(isIOS7)
{  
        self.automaticallyAdjustsScrollViewInsets
= NO;  
}  

版权声明:本文博主原创文章,博客,未经同意不得转载。

IOSi科研OS7 具体的使用说明的适应的更多相关文章

  1. Mallet 使用说明

    Mallet:自然语言处理工具包 发表于128 天前 ⁄ 技术, 科研 ⁄ 评论数 6 ⁄ 被围观 1006 Views+ MALLET是基于java的自然语言处理工具箱,包括分档得分类.句类.主题模 ...

  2. Atitit.项目修改补丁打包工具 使用说明

    Atitit.项目修改补丁打包工具 使用说明 1.1. 打包工具已经在群里面.打包工具.bat1 1.2. 使用方法:放在项目主目录下,执行即可1 1.3. 打包工具的原理以及要打包的项目列表1 1. ...

  3. awk使用说明

    原文地址:http://www.cnblogs.com/verrion/p/awk_usage.html Awk使用说明 运维必须掌握的三剑客工具:grep(文件内容过滤器),sed(数据流处理器), ...

  4. “我爱背单词”beta版发布与使用说明

    我爱背单词BETA版本发布 第二轮迭代终于画上圆满句号,我们的“我爱背单词”beta版本已经发布. Beta版本说明 项目名称 我爱背单词 版本 Beta版 团队名称 北京航空航天大学计算机学院  拒 ...

  5. Oracle 中 union 和union all 的简单使用说明

    1.刚刚工作不久,经常接触oracle,但是对oracle很多东西都不是很熟.今天我们来了解一下union和union all的简单使用说明.Union(union all): 指令的目的是将两个 S ...

  6. Map工具系列-02-数据迁移工具使用说明

    所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map ...

  7. Map工具系列-03-代码生成BySQl工具使用说明

    所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map ...

  8. jQuery验证控件jquery.validate.js使用说明

    官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation jQuery plugin: Validation 使用说明 转载 ...

  9. gdbsever 使用说明

    gdbsever 使用说明 在新塘N3292x平台下 编译 gdbsever ./configure --target=arm-linux --host=arm-linux arm-linux-gdb ...

随机推荐

  1. UVA11324-- The Largest Clique(SCC+DP)

    题目链接 题意:给出一张有向图,求一个结点数最大的结点集,使得该结点集中随意两个结点u和v满足:要么u能够到到v,要么v能够到达u(u和v能够互相到达) 思路:我们能够缩点,用Tarjan求出全部强连 ...

  2. openCV之头文件分析

    我们利用openCV开源库进行项目开发时,往往要牵涉到头文件的添加问题,而openCV中头文件众多,该如何选择呢?下面对openCV2.4.10的头文件进行一个简单的梳理,以便能够快速的添加对应的头文 ...

  3. ASP.NET 2.0 页(Page)生命周期概述

    原文:ASP.NET 2.0 页(Page)生命周期概述 引用MSDNASP.NET 页生命周期概述 ASP.NET 页运行时,此页将经历一个生命周期,在生命周期中将执行一系列处理步骤.这些步骤包括初 ...

  4. LIS小结(O(∩_∩)O~哄哄)

    ~\(≧▽≦)/~啦啦啦,昨天说的是LCS,今天我们要学习的是LIS,什么是LIS呢?  LIS: 最长有序子序列(递增/递减/非递增/非递减)这么说还是有些模糊,举个例子: 在一个无序的序列a1,a ...

  5. C语言信号学习笔记

    在C语言中,对于错误有很多处理方式.然而,今天学习了信号处理,感觉这种处理方式十分灵活,特此记录. 关于信号处理的函数包含于头文件<signal.h>中.所谓的信号,多指出乎程序员意料的行 ...

  6. hdu2647解题报告

    题意:有个工厂的老板给工人发奖金,每人基础都是888,工人们有自己的想法,如:a 工人想要比 b 工人的奖金高,老板想要使花的钱最少 那么就可以 给b 888,给a 889 ,但是如果在此基础上,b也 ...

  7. linux 下opensplice的简易安装

    http://www.prismtech.com/opensplice/opensplice-dds-community/software-downloads 下载对应我选择的是: OpenSplic ...

  8. thinkphp URL规则、URL伪静态、URL路由、URL重写、URL生成(十五)

    原文:thinkphp URL规则.URL伪静态.URL路由.URL重写.URL生成(十五) 本章节:详细介绍thinkphp URL规则.URL伪静态.URL路由.URL重写.URL生成 一.URL ...

  9. [Android学习笔记]组合控件的使用

    组合控件的使用 开发过程中,多个UI控件需要协同工作,相互交互之后,才可完成一个完整的业务需求,此时可把这些控件封装成为一个整体,相互之间的交互逻辑封装其中,外部调用可无需关心内部逻辑,只需获取处理后 ...

  10. How-To: add EPEL repository to Centos 6.x is Easy!

    How-To: add EPEL repository to Centos 6.x is Easy! | ITek Blog How-To: add EPEL repository to Centos ...