iOS7 SDK各种坑——手Q团队总结

http://s.p.qq.com/pub/show?p=82e0c8d9&id=4f6fdb7610fed&plg_auth=1&pt=4&puin=2195769561&idx=1&st=3

2014年04月14日

antonyzhao(赵峰) SNG即通产品部\平台开发组副组长

IViewController布局

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

时间: 2024-10-07 14:39:42

iOS7 SDK各种坑——手Q团队总结的相关文章

如果你是手Q的产品经理,你将如何和微信竞争?

[文章摘要]当我需要发消息给某个人或某个群时,常用的联系人我会寻找聊天记录,非常用联系人则直接搜索人名或者查看通讯录,偏向于使用语音通话,免去打字的麻烦.比较在意操作的便捷程度,因为移动环境里走走停停,产品流程随时中断,操作步骤越少越好.微信完成这个流程需要1到3次点击,拖动的操作时长在联系人数有限的时候非常便捷. 1. 核心场景: 首先我们来想象一下微信(6.1.1,IOS8.2)最常见的使用场景 用户角色:我,大四学生,实习当中.互联网产品从业人员.联系人300多,活跃群组数大概有10个.每

腾讯优测优社区干货精选|手Q刷一刷红包后台设计总结

文 / 腾讯 邓建俊 优测小优有话说: 以为优社区除了测试知识就没有其他东西啦?手Q大牛带你走一波红包的后台设计!!! 1. 前言 2016除夕夜注定是一个不平凡的夜晚,除了陪家人吃团圆饭.看春晚,还得刷一刷.摇一摇.咻一咻,忙得不亦乐.相信大部分读者也已经体验过手Q的刷一刷抢红包,玩法简单中奖率高,得到了许多用户的好评. 那么对于后台而言,要实现这个亿万级用户的抢红包系统,我们将会面临哪些问题? (1)海量的并发请求,预估峰值800w/s 800w/s的预估峰值请求,红包系统必须要保证在如此高

手Q浏览器与UC的5年基情 2015恐生变

互联网行业时不时地上演撕逼大战,而撕逼的背后或许是真爱,手Q浏览器一经出世就与UC之间纠缠不清.而UC十年中,前五年孤傲的没有小伙伴,而后5年则是与手Q浏览器共同经历基情燃烧的岁月.进入2015年,双方的基情或许会出现变故. 09年,UC迎来最强对手 "战斗"是互联网的主题,而且精彩纷.有像老周一样来者不拒,逮谁灭谁的:也有打车软件市场这样,干爹有钱任性的:还有像UC浏览器和手机QQ浏览器这样,相爱相杀很多年,还注意一点点吃相.保留一点点节操的. 自UC优视2004年创立以来已有10年

iOS7 SDK新特性

春风又绿加州岸.物是人非又一年.WWDC 2013 keynote落下帷幕,新的iOS开发旅程也由此开启.在iOS7界面重大变革的背后,开发人员们须要知道的又有哪些呢.同去年一样,我会先简单纵览地介绍iOS7中我个人觉得开发人员须要着重关注和学习的内容,之后再陆续对自己感兴趣章节进行探索.计划继承类似WWDC2012的笔记的形式,希望对国内开发人员有所帮助. 相关笔记整理例如以下: UI相关 全新UI设计 iOS7最大的变化莫过于UI设计.或许你会说UI设计"这是设计师大大们应该关注的事情,不关

海量服务实践──手 Q 游戏春节红包项目设计与总结(上篇)

导语 大哥说,今年手Q游戏的春节红包你来做.那该怎么做?以及怎么做才能让大哥放心?本文从后台的角度出发讲述了这个过程和方法,对于关键的前台部分也有所涉及. 目录 1.需求背景 1.1.红包类别 1.2.体验流程 1.3.后台需求 2.需求分析 2.1.礼包列表 2.2.区服信息 2.3.领取礼包 3.整体方案与项目分解 4.需求开发 4.1.功能需求开发 4.2.性能需求开发 4.3.容错需求开发 4.4.监控需求开发 5.系统保障 5.1.系统容灾 5.2.过载保护 5.3.柔性可用 5.4.

手游团队协作存在的问题

 经历过若干个手游项目,有单机,有网游,所在的公司规模都不大,团队规模也从几人到十几人不等.期间遇到了不少团队协作方面的问题,相信也能代表国内大部分团队的情况,特此做简单点评. 1.开发计划制定不合理.领导.策划过多干预计划,完全不顾开发时间是否充裕,导致代码质量底下,缺陷率较高,整体开发周期反而上升. 我的观点: 1)作为核心人员,产品经理有必要对美术.程序和策划等每一项技术进行一定程度的了解.主程.主美.主策分别制定工作计划,由经理进行审核.整合. 2)逐级管理,不得互相干预. 2.程序

iOS 平台 Cocos2d-x 项目接入新浪微博 SDK 的坑

iOS 平台 Cocos2d-x 项目接入新浪微博 SDK 的坑 最近在做一个 iOS 的 cocos2d-x 项目接入新浪微博 SDK 的时候被“坑”了,最后终于顺利的解决了.发现网上也有不少人遇到一样的问题,但是能找到的数量有限的解决办法写得都不详细,很难让人理解,我来深入的写一写. 我的开发环境 Mac OS X 10.10.1 Xcode 6.1.1 (6A2008a) Cocos2d-x 3.2 新浪微博 SDK for iOS 2015 年 1 月 5 日从 github clone

O2O之下,腾讯觊夺移动支付大数据,手Q支付出战支付宝

业内围绕BAT做O2O的探讨有很多,不过BAT从并未认定自身是一家O2O公司,虽然三巨头均在不同程度上涉足了O2O市场,但更多是都是在做流量.信息.数据等侧重线上的事,真正的核心是移动支付,尤其是移动支付中蕴藏的大数据价值. 腾讯的支付野心 微信支付+QQ钱包力拼支付宝钱包  过去一年,微信支付与支付宝钱包都在争先恐后的争夺线下支付场景,支付宝钱包已与家乐福.华润万家.欧尚.武汉中百.苏果.7-11等商超.便利店达成合作:微信支付也已先后接入了永辉超市.上品折扣.卜蜂莲花.联华华商.家乐福等,双

微信占比降至4成 手游团队转向H5

4月2日,移动游戏数据分析公司DataEye发布了<2015Q1HTML5游戏数据报告>.微信作为H5游戏的渠道入口,占比从上个季度的近7成降至4成,各路App作为HTML5游戏的新入口. DataEye此次调研样本总回收837份,有效样本数410份.与上季度报告不同的是,增加了H5游戏从业者与公司的调查.与2014Q4报告相同,接近6成的受访者已经迚入HTML5游戏产业,超过3成的受访者还处于观望状态. 2015Q1报告新增内容显示,受访者中,从手游转向HTML5游戏的从业者最多,其次为页游