iOS SDK更新换代的功能
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更新换代的功能的更多相关文章
- iOS之开发支付功能概述
前言:本随笔将对IOS开发的支付功能进行一个概述. 内容大纲: 一.常见的支付方案简介 二.第三方支付SDK 三.苹果官方支付方案 四.Web支付方案 正文: 一.常见的支付方案简介 在微信支付中 微 ...
- IOS开发之支付功能概述
前言:本随笔将对IOS开发的支付功能进行一个概述. 内容大纲: 一.常见的支付方案简介 二.第三方支付SDK 三.苹果官方支付方案 四.Web支付方案 正文: 一.常见的支付方案简介 在微信支付中 微 ...
- 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 ...
- 百度VS高德:LBS开发平台ios SDK对比评测
随着iPhone6手机的热销,目前的iOS应用开发市场也迎来了全盛时期.据了解,目前市面上已有的iOS应用基本覆盖了购物.上门服务.用车服务.娱乐等行业.而在这些iOS应用中,内置LBS服务的应用占大 ...
- 【转】使用Xcode中的iOS SDK给iphone开发出第一个App程序
之前已经折腾过用Xcode开发OS X的程序了,现在继续折腾,用iOS SDK开发移动设备(iphone/ipad/ipod touch)的程序. 1.从iOS Developer Library中找 ...
- 【学习总结】OS X , IOS , IOS SDK , XCode之间的关系
几个基本的概念 : OS X : 属于桌面PC级别(IMac,MacPro等)对应安装的操作系统 IOS : 属于移动设备级别(Iphone,Ipad等)对应安装的操作系统 XCode: 是一个IDE ...
- 新浪微博iOS SDK UIImage+WBSDKResize.o
Undefined symbols for architecture armv7: "_kCGImageSourceThumbnailMaxPixelSize", referenc ...
- 极光推送iOS SDK教程
iOS SDK 调试指南 iOS 调试思维导图 2 确认证书 请到"应用详情页面"确认证书可用性: 3 开发环境测试 在对 JPush iOS 开发环境进行测试前,请确保 3 个 ...
- 跨iOS SDK版本编译问题
iOS开发时会考虑两种SDK版本兼容性:一个是运行时SDK版本的兼容,即已构建/已发布的APP能在不同系统版本的用户手机上正常运行:一个是编译时SDK版本的兼容,即使用不同版本的SDK编译项目都能正常 ...
随机推荐
- HDU 3938
并查集的离线算法. 题意是大坑.理解为寻找两点之间所有路径中的最长的边的值小于输入的值的点对的个数. 直接来代码. #include<stdio.h> #include<iostre ...
- ultraiso:usb-hdd+ v2
http://cn.ezbsystems.com/ultraiso/download.htm 普通隐藏:建立一个LBA前置的PBR包含表头的活动分区.高端隐藏:建立一个LBA后置的PBR包含表头的活动 ...
- 2003-07-16T01:24:32Z这是什么时间格式
这是标准的XML Schema的"日期型数据格式”. T是代表后面跟着“时间”.Z代表0时区,或者叫UTC统一时间. 世界的每个地区都有自己的本地时间,在Internet及无线电通信时,时间 ...
- linux系列之-—03 常见问题
问题1 描述:Linux如何查看JDK的安装路径 问题2 描述:执行shell脚本时报错,错误信息为:bash: line 19: jar: command not found 原因:因为在系统环境变 ...
- 安卓版本和Api Level
Platform Version API Level VERSION_CODE Notes Android 4.4 19 KITKAT Platform Highlights Android 4.3 ...
- 嵌入式开发之命令行---linux下的find文件查找命令与grep文件内容查找命令
在使用linux时,经常需要进行文件查找.其中查找的命令主要有find和grep.两个命令是有区的. 区别:(1)find命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访 ...
- Bash Shell 解析路径获取文件名称和文件夹名
前言 还是今天再写一个自己主动化打包脚本.用到了从路径名中获取最后的文件名称.这里记录一下实现过程. 当然,最后我也会给出官方的做法.(ps:非常囧,实现完了才发现原来Bash Shell有现成的函数 ...
- 微信企业号调用js-sdk注意事项
企业号应用必须添加可信域名,域名必须通过备案,可以是子域名,如果网站带端口,一定也要加上端口号...踩坑记
- 2016/3/18 ①PHP基础 ② PHP函数 ③其他函数(随机数、关于日期) ④正则表达式 ⑤字符串处理
一.PHP基础 1,标记和注释 ①<?php?> ②单行注释// 多行注释/** */2, 输出语句 ①echo输出 echo可以输出多个字符串,用逗号隔开. ②print输出 pr ...
- HDU 5044 Tree 树链剖分+区间标记
Tree Problem Description You are given a tree (an acyclic undirected connected graph) with N nodes. ...