您的位置:首页 > 移动开发 > IOS开发

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: