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

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

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

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

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

后面发现是因为设置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就可以解决这个问题了。

你可能感兴趣的:(IOS开发)