新近。我进行了项目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. Qt4在linux下的安装

    1.下载SDK ftp://ftp.informatik.hu-berlin.de/pub/Mirrors/ftp.troll.no/QT/qtsdk/qt-sdk-linux-x86-opensou ...

  2. java.lang.ClassCastException: sun.proxy.$Proxy11 cannot be cast to分析

    报这个错,只有一个原因,就是你转化的类型不对. 如果你的类是一个单实体类,也就是没有继承或是接口别的类. public class HjmServiceImpl {} 那么这样写就可以: HjmSer ...

  3. Xamarin 安装教程 支持Visual Studio 2013

    本文的前提是你已经正确的安装了VS 2013. 本文的全部步骤在Win7 Ultimate 64系统上測试通过.支持VS 2013,我用的版本号是VS 2013 update2. 安装 1.      ...

  4. 依赖注入(DI)有助于应用对象之间的解耦,而面向切面编程(AOP)有助于横切关注点与所影响的对象之间的解耦(转good)

    依赖注入(DI)有助于应用对象之间的解耦,而面向切面编程(AOP)有助于横切关注点与所影响的对象之间的解耦.所谓横切关注点,即影响应用多处的功能,这些功能各个应用模块都需要,但又不是其主要关注点,常见 ...

  5. 从零开始学C++之从C到C++(二):引用、内联函数inline、四种类型转换运算符

    一.引用 (1).引用是给一个变量起别名 定义引用的一般格式:类型  &引用名 = 变量名: 例如:int a=1; int  &b=a;// b是a的别名,因此a和b是同一个单元 注 ...

  6. MySQL多表查询之外键、表连接、子查询、索引

    MySQL多表查询之外键.表连接.子查询.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为 ...

  7. Config File Settings Of EF——实体框架的配置文件设置

    我亦MSDN 原文地址 http://msdn.microsoft.com/en-us/data/jj556606 Entity Framework allows a number of settin ...

  8. MSF 离线攻击

    MSF 离线攻击 MSF连环攻击在internet上实现是不太现实的,网络中的安全设备(防火墙.入侵检测.入侵防护系统). 实验拓扑如下: 实验说明:安全实验中的包过滤防火墙在测试中使用的是linux ...

  9. Git——git 上传时 遗漏文件解决办法

    今天在Server上建立一个git 库,把本地的code 上传到Server,再次clone下来时,发现少了些文件.原来git 工具不上上传一些二进制,pdf,.patch等一些文件.在上传时,git ...

  10. Android从raw、assets、SD卡中获取资源文件内容

    先顺带提一下,raw文件夹中的文件会和project一起经过编译,而assets里面的文件不会~~~   另外,SD卡获取文件需要权限哦! //从res文件夹中的raw 文件夹中获取文件并读取数据 p ...