iOS你不知道的事②

时间:2022-11-02 19:36:57
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