关于ios push转场的时候一级界面一些控件会有短暂停留的问题

来源:互联网 发布:javascript入门 pdf 编辑:程序博客网 时间:2024/05/21 17:07

今天遇到一个问题,这里记录一下,问题描述如标题。

一级页面如下图所示:
最下面那个是个按钮

二级页面如下图所示:
这里写图片描述

跳转过去以后,下面的按钮会有一个短暂的停留,然后才会消失。

后面发现是因为设置self.view的默认位置引起的,因为从ios7以后,navigation controller的view的Y默认是从navigation bar的顶部开始,所以view的所有子控件可能会和你预想的偏差44px,所以我在二级页面中设置了view从navigation bar的底部开始,代码如下:

if ([self respondsToSelector:@selector(edgesForExtendedLayout)])    {        self.edgesForExtendedLayout = UIRectEdgeNone;    }

这里要注意的是edgesForExtendedLayout这个枚举类型

typedef NS_OPTIONS(NSUInteger, UIRectEdge) {    UIRectEdgeNone   = 0,    UIRectEdgeTop    = 1 << 0,    UIRectEdgeLeft   = 1 << 1,    UIRectEdgeBottom = 1 << 2,    UIRectEdgeRight  = 1 << 3,    UIRectEdgeAll    = UIRectEdgeTop | UIRectEdgeLeft | UIRectEdgeBottom | UIRectEdgeRight} NS_ENUM_AVAILABLE_IOS(7_0);

如果设置成 self.edgesForExtendedLayout = UIRectEdgeBottom;那么就会self.view.frame是从navigationBar下面开始计算一直到屏幕底部;
如果设置成 self.edgesForExtendedLayout = UIRectEdgeNone;那么就会self.view.frame是从navigationBar下面开始计算一直到屏幕tabBar上部;
如果设置成 self.edgesForExtendedLayout = UIRectEdgeTop;那么就会self.view.frame是从navigationBar上面计算面开始计算一直到屏幕tabBar上部;

所以当我设置为UIRectEdgeNone时,其实二级页面的view是不包含下面高度为44px的这块区域的,在转场的时候才会出现短暂停留的情况。

将self.edgesForExtendedLayout设为UIRectEdgeBottom就可以解决这个问题了。