IOSi科研OS7 具体的使用说明的适应
新近。我进行了项目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中假设须要改变状态栏则须要重载下面两个方法:
{
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。
另外在一些地方或许还须要加上:
self.automaticallyAdjustsScrollViewInsets = NO;
}
|
1
2
3
|
if
(isIOS7) {
self.automaticallyAdjustsScrollViewInsets
= NO; }
|
版权声明:本文博主原创文章,博客,未经同意不得转载。
IOSi科研OS7 具体的使用说明的适应的更多相关文章
- Mallet 使用说明
Mallet:自然语言处理工具包 发表于128 天前 ⁄ 技术, 科研 ⁄ 评论数 6 ⁄ 被围观 1006 Views+ MALLET是基于java的自然语言处理工具箱,包括分档得分类.句类.主题模 ...
- Atitit.项目修改补丁打包工具 使用说明
Atitit.项目修改补丁打包工具 使用说明 1.1. 打包工具已经在群里面.打包工具.bat1 1.2. 使用方法:放在项目主目录下,执行即可1 1.3. 打包工具的原理以及要打包的项目列表1 1. ...
- awk使用说明
原文地址:http://www.cnblogs.com/verrion/p/awk_usage.html Awk使用说明 运维必须掌握的三剑客工具:grep(文件内容过滤器),sed(数据流处理器), ...
- “我爱背单词”beta版发布与使用说明
我爱背单词BETA版本发布 第二轮迭代终于画上圆满句号,我们的“我爱背单词”beta版本已经发布. Beta版本说明 项目名称 我爱背单词 版本 Beta版 团队名称 北京航空航天大学计算机学院 拒 ...
- Oracle 中 union 和union all 的简单使用说明
1.刚刚工作不久,经常接触oracle,但是对oracle很多东西都不是很熟.今天我们来了解一下union和union all的简单使用说明.Union(union all): 指令的目的是将两个 S ...
- Map工具系列-02-数据迁移工具使用说明
所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map ...
- Map工具系列-03-代码生成BySQl工具使用说明
所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map ...
- jQuery验证控件jquery.validate.js使用说明
官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation jQuery plugin: Validation 使用说明 转载 ...
- gdbsever 使用说明
gdbsever 使用说明 在新塘N3292x平台下 编译 gdbsever ./configure --target=arm-linux --host=arm-linux arm-linux-gdb ...
随机推荐
- [置顶] Cocos2d-x 实例源码分析之二 小实例的主框架
这篇文章是分析第一个小实例ActionTest的源码.其实所有实例程序的结构都是一样的,只有特定方法里的代码不同,大的框架都是一样的.也就是说看完这篇文章你就可以自己开始分析其他源码了. 废话不多说, ...
- HDU 1535 Invitation Cards (POJ 1511)
两次SPFA. 求 来 和 回 的最短路之和. 用Dijkstra+邻接矩阵确实好写+方便交换.可是这个有1000000个点.矩阵开不了. d1[]为 1~N 的最短路. 将全部边的 邻点 交换. d ...
- C/C++头文件
C/C++头文件 #include <assert.h> //设定插入点 #include <ctype.h> //字符处理 #include <errno.h> ...
- Windows8和MacOS10.9双系统安装及Mac经常使用软件安装--联想E49A
前提 本篇内容所描写叙述的内容仅仅适合联想E49A笔记本,经过本篇的内容之后,对于Mac OS 10.9的使用达到正常工作使用的标准,完美度已经比較好了. 结果例如以下:显卡.网卡(RTL8168). ...
- OCP读书笔记(4) - 配置备份设置
4.Configuring Backup Settings 查看RMAN持久化设置 [oracle@easthome ~]$ rman target / RMAN> show all; SQL& ...
- js关闭浏览器窗口事件
js关闭浏览器窗口 js关闭浏览器窗口,不弹出提示框.支持ie6+,火狐,谷歌等浏览器. <html> <head /> <body> <script typ ...
- iphone开发中数据持久化之——模型对象归档(二)
在Cocoa世界中,术语“归档”是指另一种形式的序列化,它可以实现对任何对象的序列化.使用对模型对象进行归档的技术可以轻松将复杂的对象写入文件,然后再从中读取它们.只要在类中实现的每个属性都是标量(如 ...
- 开源 java CMS - FreeCMS2.3 留言管理
原文地址:http://javaz.cn/site/javaz/site_study/info/2015/22027.html 项目地址:http://www.freeteam.cn/ 留言管理 管理 ...
- poj3974(manacher)
传送门:Palindrome 题意:给定一个字符串,求最长回文子串. 分析:manach裸题,核心理解mx>i?p[i]=min(p[2*id-i],mx-i):1. #pragma comme ...
- document.write()相关
原文地址:http://www.cnblogs.com/dh616854836/articles/2140349.html document.write()脚本向窗口(不管是本窗口或其他窗口)写完内容 ...