美文网首页
iOS小记--UITabController

iOS小记--UITabController

作者: 原鸣清 | 来源:发表于2016-03-23 21:06 被阅读510次

    本文的主角是viewWillLayoutSubviews,在UIViewController有这样一个方法,在VC默认的那个view将要layoutSubViews时会被调用,在VC的子类需要的时候可以重载它,默认的操作是个空操作,在API还有个对应的viewDidLayoutSubviews的方法。

    这里提到这个是因为开发项目的时候碰到这样的情况,我建了一个继承自UITabController的controller,默认的那个tabBar上有5个UITabBarButton,我根据需求自定义了一个view加在了tabBar的上面,这个时候我不想要这5个UITabBarButton,所以我就在viewDidLoad里把它们都移除了,这样我的tabBar的子视图便只有我想要的那一个。

    看起来很OK,可是好景不长,app里面点过来点过去,然后就发现那5个该死的UITabBarButton就回来了,测试了很多次,发现是在某些页面调用了popToViewController造成的。不过没有关系,来一个我删一个,我再把它们删了就好了,反正又不看。

    找了蛮久,找到像上面这样的方法,如获至宝,重载之后简单实现如下:

    - (void)viewWillLayoutSubViews {

    for (UIView *vi in self.tabBar.subviews) {

    if ([vi isKindOfClass:[IWTabBar class]]) {

    continue;

    }

    [vi removeFromSuperview];

    }

    }

    然后还在文档里找到这样一句话:

    当视图的bounds变化时。视图需要调整它的子视图的位置,这个时候就会call上面的方法。

    由此可见,popToViewController是会影响到window的根视图控制器的view的bounds的,即使没有变化,也会重新刷新下。当然,这些只是猜测有待验证。

    相关文章

      网友评论

          本文标题:iOS小记--UITabController

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