美文网首页
自定义tabbar被覆盖问题

自定义tabbar被覆盖问题

作者: PandaXiong | 来源:发表于2017-12-14 15:20 被阅读93次

    自定义tabbar的思路创建一个view取代tabbar。
    但是很快就发现一个问题,当我们dismiss或则popToViewController的时候,还是会出现系统的tabbarbutton。
    很明显是系统又添加了一遍tabbarbutton,添加子类必然会触发layoutSubviews方法,因为layoutSubviews是布局子视图的方法。如果能重写layoutSubviews方法就能解决这个问题。
    用黑魔法runtime就能替换掉UItabbar中的layoutSubviews方法,在布局子视图的时候将系统自带的UItabbarbutton给移除掉,
    这段代码是写在UItabbar的分类中的:

    #import "UITabBar+Category.h"
    #import "MainTabBar.h"
    @implementation UITabBar (Category)
    
    + (void)load{
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            SEL systemSel = @selector(layoutSubviews);
            SEL lxqSel = @selector(remove_layoutSubviews);
            
            Method systemMethod = class_getInstanceMethod([self class], systemSel);
            Method lxqMethod = class_getInstanceMethod([self class], lxqSel);
            BOOL isAdd = class_addMethod(self, systemSel, method_getImplementation(lxqMethod), method_getTypeEncoding(lxqMethod));
            if (isAdd) {
                class_replaceMethod(self, lxqSel, method_getImplementation(systemMethod), method_getTypeEncoding(systemMethod));
            } else {
                method_exchangeImplementations(systemMethod, lxqMethod);
            }
        });
    }
    
    - (void)remove_layoutSubviews{
        NSArray *subviews = self.subviews;
        for (UIView *subview in subviews) {
            if ([subview isKindOfClass:[MainTabBar class]]) {
                
            } else {
                [subview removeFromSuperview];
            }
        }
        
    }
    

    相关文章

      网友评论

          本文标题:自定义tabbar被覆盖问题

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