IOS7的一个小改变

来源:互联网 发布:短信轰炸机软件下载 编辑:程序博客网 时间:2024/05/14 09:04

这段时间一直忙着项目中功能点的实现,对界面上的东西没有过多的注意,昨天我把美工刚给我设计好的界面拿过来,打算调整一下程序的界面,我发现了一个问题…… 

好了,不罗嗦了,进入主题

因为我这个界面主要是用来展示图书列表的,因此上满加了一个scrollView,这样可以展示多于一屏的界面,当我按照美工设计的尺寸往scrollView上加图的以后,每次运行发现图片在scrollView上的显示都有向下一段像素的偏移,我仔细的检查了一遍又一遍的代码,也没有发现问题。我刚开始想的是图片的偏移是不是因为那里更改了scrollView的contentOffset属性被修改了,我查找了代码中这个属性,结果没发现。经过断点调试,我从堆栈里的信息里发现从程序运行开始到执行到断点之前,系统已经执行了很多功能,从里面我发现NavigationController,做了很多事情,再看界面,这个界面上面确实有NavigationBar的存在,我目测一下,下移的高度和NavigationBar+statuBar的高度,我从创建到最后执行这段代码这两处分别都打印了scrollView.contentOffset.y的值,结果发现没变!这更让我无法接受了!!明明是下移了,但是为什么打印出来没有改变呢?

我用了刚学的一个监测系统内部变量状态变化的方法:就是在创建scrollView的同时新建立一个线程,来不断的监听scrollView.contentOffset.y的值从建立到最终加到屏幕上后这段时间内的变化,结果我发现打印的结果是0.0--64.0--0.0!这说明系统默认对scrollView.contentOffset.y做了64个像素的偏移,这让我不能理解了。这是为什么呢?我又仔细查找了scrollView的相信介绍,发现加在scrollView上的view的显示同时受到以下三个属性的限制:contentOffset,contentSize和contentInset这三者的限制,前两个属性我们都知道,也一直在用,这是这第三个属性一直都没用过甚至都不知道它的存在。

经过一番查找我发现:从IOS7之后,桌面的坐标原点相对以前发生了变化,在IOS7以前的系统,如果界面上加了statuBar后,坐标原点会相对原来的(0,0)下移至(0,20),如果界面上再同时出现了NavigationBar之后坐标原点就会下移到(0,64)的位置,这时候你打印self.view.frame的时候你会发现,他的frame会变成(0,0,320,416)。但是到了IOS7以后,就有了变化。这是因为新系统采用了完全不一样的风格,系统的各种用于导航的空间都采用了半透明的设置,这样使得用户能够透过这些控件看到它背后的东西,因此view的坐标原点一直都没有变化,但是它比较智能,为了让你少做工作,它把scrollView.contentInset做了一个便宜,如果界面上有statuBar存在它就将scrollView.contentInset.top设置为20,如果还有NavigationBar那就设置为64,这样使得contentSize这个框向下移动了指定的像素,移动好以后,又把contentOffset的属性设置为(0,0),好像什么也没发生一样。


总结一下:IOS7系统以后,view的定点一直都在左上角,不管界面是不是有状态栏和导航栏。还有就是如果有状态栏或者导航栏,你在使用scrollView的时候,它会很智能的讲内部试图向下做个偏移。(我觉得他这种智能是多余的,还是让我们自己做好了)

当然这只是我个人的拙见,如果牛人路过发现有什么不对的地方,还请帮忙给指出来,谢谢了!

0 0
原创粉丝点击