今天做一个需求,需求是关于允许游客登录主界面去观看免费课程,但对于一些关系用户个人的操作就需要登录。界面如下所示:
因此就需要在主界面,判断如果是游客身份,就隐藏
tabbar
,显示登录提示按键,当点击按键弹出登录界面。这是遇到一个问题,就是隐藏了tabbar
,添加登录提示按键,但是按键的点击事件没有响应,因此特地记录下。
1. 原因
按键之所以没响应,原因有两个:
- 该
viewController
的edgesForExtendedLayout
属性被设置为UIRectEdgeNone
, -
self.tabBarController.tabBar
的backgroundImage
被设置了背景图片。
2. 解释
-
edgesForExtendedLayout
是IOS7中,苹果引入的关于UIViewController
新属性,它的默认值为UIRectEdgeAll
,意思就是向四周边缘均延伸,如果viewController
的容器中上有navigationBar
,下有tabbar
,那viewController
的view就会覆盖到四周的区域。如下图所示:
但一般为了视图不延伸到
navigationBar
上面和tabbar
下面,因此edgesForExtendedLayout
都会设置为UIRectEdgeNone
,如下图所示:
所以很明显,如果想要登录提示按键在tabbar
位置上响应,就应该让viewController
的view
范围覆盖tabbar
位置,因此edgesForExtendedLayout
就应该设置为UIRectEdgeAll
或UIRectEdgeBottom
。
-
tabbar
的backgroundImage
设置背景图片,这时候设置edgesForExtendedLayout
的属性为UIRectEdgeAll
,并设置tabbar
的背景色的透明度为0.9,显示结果如下图所示:
可以看到由于设置了tabbar
的背景图片,所以无法看到延伸下来的红色view
视图,
这是将tabbar
隐藏,self.tabBarController.tabBar.hidden = YES;
,如下图所示:
可以看到
tabbar
的backgroundImage
还是显示在tabbar
的位置上,因此导致了登录提示按键没有响应。当设置
self.tabBarController.tabBar.backgroundImage = nil;
,如果所示:
就可以看到
viewController
的view
覆盖了tabbar
的位置。
3. 最后
送上一张图片: