新近。我进行了项目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. 我们熟悉的Textbox

    创建只读文本框 方法一: 可用Readonly属性防止用户编辑文本框内容.将Readonly属性设置为True后,用户就可以滚动文本框中的文本并将其突出显示,但不能作任何更改.将Readonly属性设 ...

  2. 可运行jar包调用exe可运行文件,子进程阻塞

    背景: 须要在项目的測试工具中加入一个button,点击后直接打开某exe工具. 这个工具的功能是导入txt文件,转为excel报表输出. 无奈解析了两行之后就停止不动了,也不报错.关闭測试工具后,就 ...

  3. IE缓存的BUG 和其他浏览器的缓存问题

    原文:IE缓存的BUG 和其他浏览器的缓存问题 1 .IE浏览器在异步请求的时候 为了偷懒  第二次请求的时候不会给后台请求相应,这样我们就无法从后台拿值,  这样的话 ,我们可以画个妆,蒙骗IE我们 ...

  4. VB.NET<机房收费系统个人重构版>你都学会了什么(之五)

    接着上篇我们说的配置文件,今天我们来说一下接口. 1.UML图 2.三层架构 3.Sqlhelper 4.配置文件 5.接口 6.设计模式 什么是接口呢?我们可以将接口理解为用于沟通的中介的抽象化.可 ...

  5. [Android学习]Activity之间传递对象和对象集合

    开发过程中,Activity之间传递数据是必不可少的,android中使用Intent和Bundle作为数据载体,在Activity之间传递,对于基础数据类型,Bundle已经提供相关的put,get ...

  6. 如何开发auto complete 智能提示功能

    目录(?)[+] 如何开发auto complete 智能提示功能 最近网上好像流传用redis实现,其实智能提示和用什么存储关系不大 07年,我过一个类似的项目 我有几千个名字,随着用户在输入框中不 ...

  7. Android相关

    wifi密码:因为我们安卓系统的手机无线账号数据是储存在一个文件里的,那就是 /data/misc/wifi/wpa_supplicant.conf ,这个是系统文件,权限不够高是无法访问的,而这个文 ...

  8. [置顶] 如何在Python IDLE中调试Python代码?

    好久没有用Python了,居然忘记了怎么在Python IDLE中调试Python代码.百度了一下,然后还是写下来吧,以免以后又忘记了. 1. Set break point in the sourc ...

  9. firefox同步数据时无响应问题

    之前设置了firefox的数据同步,可以在不同电脑上,同步自己的书签等信息,感觉很方便实用,最近在点工具立即同步时,不报错,书签也没有同步,没有任何响应: 后来查了许多网上资料,都不见效,无意间看到 ...

  10. C strstr() 函数

    包含文件:string.h 函数名: strstr 函数原型:extern char *strstr(const char *str1, const char *str2); 语法:* strstr( ...