新近。我进行了项目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. Git权威指南学习笔记(二)Git暂存区

    例如以下图所看到的: 左側为工作区,是我们的工作文件夹. 右側为版本号库,当中: index标记的是暂存区(stage),所处文件夹为.git/index,记录了文件的状态和变更信息. master标 ...

  2. OpenCV五学习: 如何使用命令来启动或关闭OpenCV的CPU指令系统CV_SSE2,CV_SSSE4和其他优化

    在这个博客.我想分享一下OpenCV源代码CPU指令系统CV_SSE2和其他相关知识 一个.    CV_SSE系列指令集的预编译符号定义在opencv2/core/internal.hpp这个头文件 ...

  3. HealthKit开发教程Swift版:起步

    原文:HealthKit Tutorial with Swift: Getting Started 作者:Ernesto García 译者:Mr_cyz ) HealthKit是iOS 8中的新的A ...

  4. Servlet和JSP读书笔记(一)

    Java Servlet 技术,简称Servlet,是Java中用于开发web应用程序的基本技术. Servlet实际上也就是一个Java程序.一个Servlet应用程序通常包含很多Servlet.而 ...

  5. 一个网友写的栈,问为啥不能迭代。具有__iter__ 和next方法的对象叫迭代器-七七巴巴黄页网

    一个网友写的栈,问为啥不能迭代.具有__iter__ 和next方法的对象叫迭代器-七七巴巴黄页网 一个网友写的栈,问为啥不能迭代.具有__iter__ 和next方法的对象叫迭代器 python视频 ...

  6. Python的对象和类型

    Python使用对象来存储数据,构造任何类型的值都是一个对象. 任何一个对象都有三个特性:身份,类型和值. 身份是对象的唯一标识,可以通过内建函数id()得到,这个值可以认为是该对象的内存地址. Py ...

  7. hdu 4715

    #include<stdio.h> #include<string.h> int prime[1100000],p[1000000],ans; void pri() {     ...

  8. django-admin.py失效的问题合集!

    今早在命令行运行django-admin.py突然失效了.联想到昨天把Python的版本号由3.4降为2.7,Django由1.65降为1.5,能够是由于当中的修改造成的问题.网上搜了一下解决方式五花 ...

  9. C++晋升之dynamic_cast

    danamic_cast 动态类型转换 ----RTTI提供的的操作符 ----动态:在执行阶段 ----类型转换:检測指针或引用类型,true->转换 ----体现价值的地方:用于多态 --- ...

  10. Python编程中常用的12种基础知识总结

    原地址:http://blog.jobbole.com/48541/ Python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时 ...