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

今天遇到一个问题,这里记录一下,问题描述如标题。
【关于ios push转场的时候一级界面一些控件会有短暂停留的问题】一级页面如下图所示:
关于ios push转场的时候一级界面一些控件会有短暂停留的问题
文章图片

二级页面如下图所示:
关于ios push转场的时候一级界面一些控件会有短暂停留的问题
文章图片

跳转过去以后,下面的按钮会有一个短暂的停留,然后才会消失。
后面发现是因为设置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就可以解决这个问题了。

    推荐阅读