隐藏UITabbar 但原位置 添加按键 不响应 原因 解析

今天做一个需求,需求是关于允许游客登录主界面去观看免费课程,但对于一些关系用户个人的操作就需要登录。界面如下所示:

隐藏UITabbar 但原位置 添加按键 不响应 原因 解析_第1张图片
image.png

因此就需要在主界面,判断如果是游客身份,就隐藏 tabbar,显示登录提示按键,当点击按键弹出登录界面。这是遇到一个问题,就是隐藏了 tabbar,添加登录提示按键,但是按键的点击事件没有响应,因此特地记录下。

1. 原因

按键之所以没响应,原因有两个:

  • viewControlleredgesForExtendedLayout属性被设置为UIRectEdgeNone
  • self.tabBarController.tabBarbackgroundImage 被设置了背景图片。

2. 解释

  • edgesForExtendedLayout 是IOS7中,苹果引入的关于 UIViewController新属性,它的默认值为UIRectEdgeAll,意思就是向四周边缘均延伸,如果viewController的容器中上有 navigationBar,下有tabbar,那 viewController的view就会覆盖到四周的区域。如下图所示:

隐藏UITabbar 但原位置 添加按键 不响应 原因 解析_第2张图片
image-UIRectEdgeAll.png

但一般为了视图不延伸到 navigationBar上面和 tabbar下面,因此 edgesForExtendedLayout都会设置为 UIRectEdgeNone,如下图所示:

隐藏UITabbar 但原位置 添加按键 不响应 原因 解析_第3张图片
image-UIRectEdgeNone.png

所以很明显,如果想要登录提示按键在tabbar位置上响应,就应该让viewControllerview范围覆盖tabbar 位置,因此edgesForExtendedLayout就应该设置为UIRectEdgeAllUIRectEdgeBottom

  • tabbarbackgroundImage 设置背景图片,这时候设置edgesForExtendedLayout 的属性为UIRectEdgeAll,并设置tabbar的背景色的透明度为0.9,显示结果如下图所示:
隐藏UITabbar 但原位置 添加按键 不响应 原因 解析_第4张图片
image-backgroundImage.png

可以看到由于设置了tabbar的背景图片,所以无法看到延伸下来的红色view视图,

这是将tabbar隐藏,self.tabBarController.tabBar.hidden = YES;,如下图所示:

隐藏UITabbar 但原位置 添加按键 不响应 原因 解析_第5张图片
image-hide-tabbar.png

可以看到 tabbarbackgroundImage还是显示在 tabbar的位置上,因此导致了登录提示按键没有响应。
当设置 self.tabBarController.tabBar.backgroundImage = nil;,如果所示:

隐藏UITabbar 但原位置 添加按键 不响应 原因 解析_第6张图片
image-backgroundImage-nil.png

就可以看到 viewControllerview覆盖了 tabbar的位置。

3. 最后

送上一张图片:

隐藏UITabbar 但原位置 添加按键 不响应 原因 解析_第7张图片
16_21128_5.jpg

你可能感兴趣的:(隐藏UITabbar 但原位置 添加按键 不响应 原因 解析)