通过handleOpenUrl打开App后子视图的大小不正确
一个答题类型的Iphone应用,需要通过handleOpenUrl启动应用,接收外部传进来的题目编号参数,之后根据题目编号找到对应的题目信息,并切换到一个子视图上进行显示。子视图最下方是标准的工具栏,切换子视图时工具栏会有一个位移动画(原本是一个TabBar,如果切换到子视图,该TabBar会消失,之后ToolBar从原来TabBar的上方位移到屏幕最下面)。正常启动应用(没有通过handleOpenUrl启动),再进入该子视图时,工具栏偏移正常,紧贴屏幕最下方。
通过handleOpenUrl启动时,除了最开始发送一个NSNotification告诉程序切换子视图,其它流程和正常启动时都一模一样,可偏偏这时工具栏的位置就没有紧贴屏幕最下方了,还在原始位置,弄了两天,检查了各个视图的autosizing、frame属性,都没搞明白怎么偏出来的。
今天不一经意看了一眼UIApplicationDelegate Protocol Reference,发现了application:didFinishLaunchingWithOptions:方法下面有行说明,
Note: It is highly recommended that you use this method to initialize your application and not the applicationDidFinishLaunching:
method.
applicationDidFinishLaunching:是默认初始化应用的方法,但说明上建议不用这方法,而是用application:didFinishLaunchingWithOptions:方法,比较了一下,后一个方法除多个参数外,是有BOOL返回值的,默认方法是没有的。
用一个带返回值方法试了试,一切变OK了,工具栏又回到了屏幕最下面。
这个解决方法比较蹊跷,但估计是ios(我的是4.0.1)在初始化应用的流程中有些细节性的东西没描述,或者实现上还是有一些很关键的差异的。
从开始到现在解决不少蹊跷问题了,看样子ios还不是特稳定,这小白鼠当得挺痛苦。