iOS你不知道的事②
2014-11-04 19:50
127 查看
1.iOS7适配问题(UIScrollView瀑布流)
iOS 7发布了,适配问题来了,开发者都忙起来了。
先记一个iOS7 的几个特点:
1.坐标:以屏幕左上角为原点(iOS7以前在状态栏或者导航条下)
2.UIScrollView(包括其子类,比如UITableView):会自动在顶部和底部预留一些空白(因为滚动经过半透明导航条或者tabbar下面,需要能隐约看到的效果),是否预留空白可以由UIViewController的
automaticallyAdjustsScrollViewInsets的这个属性控制(默认YES,表示预留空白)。
上面这些只要你用iOS开发,就能发现。
最近遇到一个问题:
在项目中一个控制器中有一个瀑布流和一个table,发现瀑布流顶部预留空白,而table却没有,查找了许多资料,终于找到了原因所在:
一个控制器中,出现UIScrollView(包括其子类),必须是第一个添加到控制器的视图上才会预留空白,这里的第一个是相对于所有的子视图,不仅仅是其他UIScrollView(包括其子类)。
那么我遇到的问题如何解决呢,还是这个属性automaticallyAdjustsScrollViewInsets,仔细看它的文档说明,它说了,如果一个控制器中出现两个以上的UIScrollView(包括其子类),这个属性需要设置为NO.即不会预留空白,那么这个控制器中所有的UIScrollView(包括其子类)都需要重新设置坐标。
2.iOS7隐藏状态栏 (电池栏)
电池状态栏。
//方法一(代码设置):
现在ios7已经更改为透明,并且不占用屏幕高度。其中隐藏及显示的方法如下:
在uiviewcontroller的子类下,调用:
if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {
// iOS 7
[self prefersStatusBarHidden];
[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
}
- (BOOL)prefersStatusBarHidden
{
return YES;//隐藏为YES,显示为NO
}
在视图切换,比如addsubview,present,pushin等,也需要注意及修改该状态栏。
//方法二(在plist里设置):
首先设置key:Status bar is initially hidden 为YES
然后设置key:View controller-based status bar appearance 为NO
即可实现全局隐藏状态栏了
3.iOS 无限后台运行
根据苹果文档中关于后台执行的描述,任何app都有10分钟左右的后台任务执行时间。 10分钟后,app会被iOS强行挂起。
但是,有5类app允许有“无限的”后台运行时间:
1. Audio。
2. Location/GPS。
3. VoIP。
4. Newsstand。
5. Exernal Accessory 。
你可以将任何app声明为上述5种类型以获得无限的后台运行时间,但当你提交app到App Store时,苹果会审查你的app,一旦发现你“滥用”了后台API,你的app将被拒绝。
当然,对于企业开发而言,不存在“滥用”的问题——企业app可以通过OTA部署,不经过苹果商店审查。
在企业部署中,你可以将一个app声明为VoIP,但这个程序根本和VoIP无关,我们的目的只是为了让iOS给我们无限后台执行的权限。声明过程是在app的Info.plist文件中加入以下key:
UIBackgroundModes
voip
iOS 7发布了,适配问题来了,开发者都忙起来了。
先记一个iOS7 的几个特点:
1.坐标:以屏幕左上角为原点(iOS7以前在状态栏或者导航条下)
2.UIScrollView(包括其子类,比如UITableView):会自动在顶部和底部预留一些空白(因为滚动经过半透明导航条或者tabbar下面,需要能隐约看到的效果),是否预留空白可以由UIViewController的
automaticallyAdjustsScrollViewInsets的这个属性控制(默认YES,表示预留空白)。
上面这些只要你用iOS开发,就能发现。
最近遇到一个问题:
在项目中一个控制器中有一个瀑布流和一个table,发现瀑布流顶部预留空白,而table却没有,查找了许多资料,终于找到了原因所在:
一个控制器中,出现UIScrollView(包括其子类),必须是第一个添加到控制器的视图上才会预留空白,这里的第一个是相对于所有的子视图,不仅仅是其他UIScrollView(包括其子类)。
那么我遇到的问题如何解决呢,还是这个属性automaticallyAdjustsScrollViewInsets,仔细看它的文档说明,它说了,如果一个控制器中出现两个以上的UIScrollView(包括其子类),这个属性需要设置为NO.即不会预留空白,那么这个控制器中所有的UIScrollView(包括其子类)都需要重新设置坐标。
2.iOS7隐藏状态栏 (电池栏)
电池状态栏。
//方法一(代码设置):
现在ios7已经更改为透明,并且不占用屏幕高度。其中隐藏及显示的方法如下:
在uiviewcontroller的子类下,调用:
if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {
// iOS 7
[self prefersStatusBarHidden];
[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
}
- (BOOL)prefersStatusBarHidden
{
return YES;//隐藏为YES,显示为NO
}
在视图切换,比如addsubview,present,pushin等,也需要注意及修改该状态栏。
//方法二(在plist里设置):
首先设置key:Status bar is initially hidden 为YES
然后设置key:View controller-based status bar appearance 为NO
即可实现全局隐藏状态栏了
3.iOS 无限后台运行
根据苹果文档中关于后台执行的描述,任何app都有10分钟左右的后台任务执行时间。 10分钟后,app会被iOS强行挂起。
但是,有5类app允许有“无限的”后台运行时间:
1. Audio。
2. Location/GPS。
3. VoIP。
4. Newsstand。
5. Exernal Accessory 。
你可以将任何app声明为上述5种类型以获得无限的后台运行时间,但当你提交app到App Store时,苹果会审查你的app,一旦发现你“滥用”了后台API,你的app将被拒绝。
当然,对于企业开发而言,不存在“滥用”的问题——企业app可以通过OTA部署,不经过苹果商店审查。
在企业部署中,你可以将一个app声明为VoIP,但这个程序根本和VoIP无关,我们的目的只是为了让iOS给我们无限后台执行的权限。声明过程是在app的Info.plist文件中加入以下key:
UIBackgroundModes
voip
相关文章推荐
- 《iOS 7 Programming Pushing the Limits》系列:你可能不知道的ObjC技巧
- 不知道大家知道不知道,iOS开发,web页面的链接的active属性无效,但是今天发现一个hack办法可以让Css的active有效
- iOS开发-文件管理之多的是你不知道的事(二)
- iOS UIScrollView 你可能不知道的奇技淫巧
- iOS 10 个实用小技巧(总有你不知道的和你会用到的)
- iOS10个实用小技巧(总有你不知道的和你会用到的)
- iOS应用安全开发,你不知道的那些事
- iOS“断点”(Break Point)你不知道多强大
- Android IOS WebRTC 音视频开发总结(六四)-- webrtc能走多远我不知道,但这个市场真实存在
- 【ios 汇总 你可能不知道的调试技巧】
- iOS开发(你不知道的小细节)之---导航栏
- 关于UITabbarItem在iOS 8 上显示不知道哪里来的蓝色并且模糊的问题解决办法
- iOS开发-文件管理之多的是你不知道的事(一)
- 关于UITabbarItem在iOS 8 上显示不知道哪里来的蓝色并且模糊的问题解决办法
- iOS Timer--你不知道的那些事儿
- iOS应用安全开发,你不知道的那些事
- iOS开发(你不知道的小细节)之---状态栏
- 土木工程转行IOS的点点滴滴,没受伤是不知道回头滴
- iOS 10 个实用小技巧(总有你不知道的和你会用到的)
- ios中常用的小技巧(总有你不知道的和你会用到的)