tabbar隐藏后,其位置上的按钮不响应

作者: 呆萌的中指 | 来源:发表于2017-02-22 15:33 被阅读0次

    在开发的过程中你会发现 self.tabBarController.tabBar.hidden = YES;之后,位于tabBar位置上的按钮不能响应了。

    先看一下view hierarchy,发现viewController的view并没有覆盖到navigationBar和tabBar.

    图一

    如果你的情况类似,那么答案就在下面。

    此时问题可以分为两个:1.viewController的view为什么没有填充整个屏幕 2.view以外的子view控件如何响应

    问题1: iOS7 viewController增加了edgesForExtendedLayout这个属性。

    图二

    这个属性的值是一个枚举:

    图三

    默认为:UIRectEdgeAll,这个时候viewController的view是填充整个屏幕的。但是如果你的代码里有:

    if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)]) {

    self.edgesForExtendedLayout = UIRectEdgeNone;

    }

    那么就会出现图一的情况,这个时候你应该对图三的枚举值有一定的理解了。

    问题2: 子view添加在父view 以外的区域了。这个时候如果你设置self.view.clipsToBounds = YES; 父view以外的子view将不再显示,图四带官方描述。

    图四

    这种情况你可以增大父view的大小以至于让他包含所有子view,也可以把子 view从新放在父view里。这些方法不做展示。这里推荐一种不破坏UI设计的情况下,合理的解决方案。

    使用 - (nullable UIView *)hitTest:(CGPoint)point withEvent:(nullable UIEvent *)event; 方法,图五带官方定义:

    图五

    他的作用是利用递归的方法找到父view含有这个点击点,并且层级最高的view来响应事件。

    所以我的做法是:

    在viewController中替换它原本的view:

    图六

    然后在QYBaseView中覆盖- (nullable UIView *)hitTest:(CGPoint)point withEvent:(nullable UIEvent *)event;

    图七

    用此方法,找到被添加在父view以外的子view,来响应此次的点击事件。

    相关文章

      网友评论

        本文标题:tabbar隐藏后,其位置上的按钮不响应

        本文链接:https://www.haomeiwen.com/subject/sgcuwttx.html