wantsFullScreenLayout已经作废了,取而代之是

1、edgesForExtendedLayout

这个属性是UIExtendedEdge类型,用来制定视图的哪条边需要扩展。比如UIRectEdgeTop,它把视图区域顶部扩展到statusBar(以前是navigationBar下面);UIRectEdgeBottom是把区域底部扩展到屏幕下方边缘。默认值是UIRectEdgeAll。

2、extendedLayoutIncludesOpaqueBars

如果你使用了不透明的导航栏,设置edgesForExtendedLayout的时候也请将extendedLayoutIncludesOpaqueBars的值设置为No(默认值是YES)。

3、automaticallyAdjustsScrollViewInsets

为YES时,它会找view里的scrollView,并设置scrollView的contentInset为{64, 0, 0, 0}。如果你不想让scrollView的内容自动调整,将这个属性设为NO(默认值YES)。

目前QQ重载了wantsFullScreenLayout属性方法:

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000

- (void)QQSetWantsFullScreenLayout:(BOOL)wantsFullScreenLayout

{

if (SYSTEM_VERSION >= 7.0) {

if (wantsFullScreenLayout == NO) {

self.automaticallyAdjustsScrollViewInsets = NO;

self.extendedLayoutIncludesOpaqueBars = NO;

self.edgesForExtendedLayout = UIRectEdgeLeft | UIRectEdgeBottom | UIRectEdgeRight;

} else {

self.automaticallyAdjustsScrollViewInsets = NO; // 建议手工设置

self.extendedLayoutIncludesOpaqueBars = NO;

self.edgesForExtendedLayout = UIRectEdgeAll;

}

}

[self QQSetWantsFullScreenLayout:wantsFullScreenLayout];

}

#endif

QQViewController在初始化时,self.wantsFullScreenLayout=NO。也就是

self.automaticallyAdjustsScrollViewInsets = NO;

self.extendedLayoutIncludesOpaqueBars = NO;

self.edgesForExtendedLayout = UIRectEdgeLeft | UIRectEdgeBottom | UIRectEdgeRight;

·    UITabBarController的视图结构变了

iOS7以下,UITransitionView和UITabBar是不能重叠的。而iOS7两个view是可以互相重叠。这影响我们自定义TabBar的实现机制(具体看QQTabBarController的实现方式)。

·    iOS7的UITableViewCell

1、iOS7下cell的backgroundColor为whiteColor,要手工设置为clearColor。

2、以前可以直接继承UITableViewCell然后drawRect。但是现在不行了,现在的UITableViewCell包含了一个scrollView,你重绘了UITableViewCell将会被这个scrollView遮住而完全没法显示。而且不要试图通过[cell.contentView viewWithTag]来获取里面的subview。

3、如果设置backgroundView和selectedBackgroundView,滑动删除时会发现backgroundView会右移直到覆盖删除按钮。目前解决办法是在cell layoutSubviews方法重设backgroundView和selectedBackgroundView的frame:

- (void)layoutSubviews

{

[super layoutSubviews];

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000

if (SYSTEM_VERSION >= 7.0) {

self.backgroundView.frame = self.bounds;

self.selectedBackgroundView.frame = self.bounds;

}

#endif

}

4、索引背景条backgroundColor默认为whiteColor,要把它改为clearColor:

[[UITableView appearance] setSectionIndexBackgroundColor:[UIColor clearColor]];

对应tapd bug:

http://tapd.oa.com/v3/10066451/bugtrace/bugs/view?bug_id=1010066451048986804&url_cache_key=74876e4d2f0fea09480c42284f702c98

·    iOS7基于viewController隐藏状态条

通过ViewController重载方法返回枚举值来控制状态栏的隐藏和样式。

首先,需要在Info.plist配置文件中,增加键:UIViewControllerBasedStatusBarAppearance,并设置为YES;

然后,在UIViewController子类中实现以下两个方法:

- (UIStatusBarStyle)preferredStatusBarStyle

{

return UIStatusBarStyleLightContent;

}

- (BOOL)prefersStatusBarHidden

{

return NO;

}

最后,在需要刷新状态栏样式的时候,调用[self setNeedsStatusBarAppearanceUpdate]方法即可刷新。

目前QQ是把UIViewControllerBasedStatusBarAppearance设为NO,然后根据主题配置项统一设置statusBar的样式

·    UINavigationBar和UINavigationBarItem

1、在iOS7下,如果设置的背景图大于88像素,则它会自动拉伸到状态栏。(白色皮肤切图有点bug,背景图高度为89像素)

2、如果UINavigationBarItem是自定义CustomView,则效果如下

按钮会在左边(右边)留下不少空白。目前解决方法是在leftBarButtonItem(rightBarButtonItem)左边加一个width为-10、BarButtonSystemItem为UIBarButtonSystemItemFixedSpace的UIBarButtonItem。参考代码在UINavigationItem+SwizzleMethod.m。

·    UISearchBar和UISearchDisplayController

1、测试在测试iOS7 SDK兼容性时,发现导航栏和搜索框之间有一条莫名其妙的线:

经debug分析,以前UISearchBar的子view有好几个,包括背景图view、输入框view等。现在只有一个子view,而背景图和输入框等在这个子view里。当table移动时,这个子view的frame也在不停变化,当table移动到最上面时,子view的frame.origin.y=0.5,而view. clipToBounds=YES,从而露出了viewController背景图顶部的一条线……

2、给UISearchDisplayController设置delegate后,在UISearchDisplayController不用了的时候(比如release他之前),务必要setDelegate = nil。否则可能会出野指针(某已释放的对象)被调用

self.searchDisplay.delegate = nil;

·    UILabel、UITextView、NSString的一些事

1、sizeWithFont、drawInRect等NSString的排版和绘制接口已经DEPRECATED,取而代之是sizeWithAttributes、drawInRect:withAttributes。

2、我们经常先用sizeWithFont对字符串进行排版,然后设置UILabel的frame,在iOS7,可能出现下面问题

UILabel的内容显示不完整,解决办法是UILabel调用sizeToFit。

3、UITextView现在设置 text后contentSize返回大小和frame一样,所以需要用sizeThatFits来替换。

·使用iOS7 SDK新特性导致iOS6 SDK编译不过的解决办法

例如UIStatusBarStyleLightContent是iOS7新的statusBarStyle,那写代码时,前面加上宏判断:

#if __IPHONE_OS_VERSION_MAX_ALLOWED < 70000

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque];
#else
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
#endif

iOS SDK更新换代的功能的更多相关文章

  1. iOS之开发支付功能概述

    前言:本随笔将对IOS开发的支付功能进行一个概述. 内容大纲: 一.常见的支付方案简介 二.第三方支付SDK 三.苹果官方支付方案 四.Web支付方案 正文: 一.常见的支付方案简介 在微信支付中 微 ...

  2. IOS开发之支付功能概述

    前言:本随笔将对IOS开发的支付功能进行一个概述. 内容大纲: 一.常见的支付方案简介 二.第三方支付SDK 三.苹果官方支付方案 四.Web支付方案 正文: 一.常见的支付方案简介 在微信支付中 微 ...

  3. iOS SDK Release Notes for iOS 9 iOS9 SDK 版本更新说明

    Important: This is a preliminary document for an API or technology in development. Apple is supplyin ...

  4. 百度VS高德:LBS开发平台ios SDK对比评测

    随着iPhone6手机的热销,目前的iOS应用开发市场也迎来了全盛时期.据了解,目前市面上已有的iOS应用基本覆盖了购物.上门服务.用车服务.娱乐等行业.而在这些iOS应用中,内置LBS服务的应用占大 ...

  5. 【转】使用Xcode中的iOS SDK给iphone开发出第一个App程序

    之前已经折腾过用Xcode开发OS X的程序了,现在继续折腾,用iOS SDK开发移动设备(iphone/ipad/ipod touch)的程序. 1.从iOS Developer Library中找 ...

  6. 【学习总结】OS X , IOS , IOS SDK , XCode之间的关系

    几个基本的概念 : OS X : 属于桌面PC级别(IMac,MacPro等)对应安装的操作系统 IOS : 属于移动设备级别(Iphone,Ipad等)对应安装的操作系统 XCode: 是一个IDE ...

  7. 新浪微博iOS SDK UIImage+WBSDKResize.o

    Undefined symbols for architecture armv7: "_kCGImageSourceThumbnailMaxPixelSize", referenc ...

  8. 极光推送iOS SDK教程

    iOS SDK 调试指南 iOS 调试思维导图 2 确认证书 请到"应用详情页面"确认证书可用性: 3 开发环境测试 在对  JPush iOS 开发环境进行测试前,请确保 3 个 ...

  9. 跨iOS SDK版本编译问题

    iOS开发时会考虑两种SDK版本兼容性:一个是运行时SDK版本的兼容,即已构建/已发布的APP能在不同系统版本的用户手机上正常运行:一个是编译时SDK版本的兼容,即使用不同版本的SDK编译项目都能正常 ...

随机推荐

  1. Atom安装Markdown编辑器

    1.安装插件 2.打开/关闭实时渲染: [Ctrl]+[Shift]+[M] 3.[增强]安装同步滚动插件(markdown-scroll-sync) 4.[增强]安装代码增强插件(language- ...

  2. B/S(WEB)系统中使用Activex插件调用扫描仪实现连续扫描并上传图像(IE文件扫描并自动上传)

    IE浏览器下使用Activex插件调用客户端扫描仪扫描文件并山传,可以将纸质档案(如合同.文件.资料等)扫描并将扫描图像保存到服务器,可以用于合同管理.档案管理等. 通过插件方式调用扫描仪扫描并获取图 ...

  3. python读取大文件的方法

    python计算文件的行数和读取某一行内容的实现方法 :最简单的办法是把文件读入一个大的列表中,然后统计列表的长度.如果文件的路径是以参数的形式filepath传递的,那么只用一行代码就可以完成我们的 ...

  4. 如何在Win7 x64上的配置32位的PostgreSQL ODBC数据源

    在Win7 x64下安装最新版的PostgreSQL 9.x 后,从其官网下载最新的 ODBC驱动,分为普通的32位和64位版本,正常安装后,从已安装软件列表里可以看到两个版本的驱动都已经正确显示出来 ...

  5. Cubieboard搭建Hadoop指南

    1.刷固件 出厂的Cubieboard是Android系统,需要Linux系统安装Hadoop,到此网址下载: http://dl.cubieboard.org/software/a20-cubiet ...

  6. 使用HDP快速搭建Hadoop开发环境 | Debugo

    本文简单记录了一下使用VMware workstation 10.CentOS和HDP 2.0.6(Hadoop 2.2)发行版构建Hadoop开发测试环境的全部流程.这个过程中我遇到了不少问题,也耽 ...

  7. python的线程thread笔记

    python的线程是用thread和threading来实现的.其中利用threading会更好,因为thread没有线程保护,当主线程退出了之后,子线程也会被强行退出.threading支持守护线程 ...

  8. int&amp;boolean——Java和C的一点小差别

    Java和C的差别非常多.只是预计这一点非常多人都不知道. 今天面试时碰到这么道C语言题 求执行结果 int x = -1; while(!x!=0){ cout<<x<<en ...

  9. VMware 虚拟机添加硬盘以及为新添加的硬盘创建Samba共享 (转)

    一.为VMware虚拟机添加硬盘 1. 首先在VMware虚拟机的VM->Setting子菜单中为虚拟机添加一块15G大小的SCSI类型的硬盘(注意:如果原来为IDE硬盘,SCSI类型的硬盘可能 ...

  10. [LeetCode][Java] Roman to Integer

    题目: Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from ...