UITabBar - 深度解剖


for (UIView *tabbarbutton in self.subviews) {

//        NSLog(@"%@",tabbarbutton);

 

        if ([tabbarbutton isKindOfClass:NSClassFromString(@"_UITabBarBackgroundView")]) {

            [tabbarbutton setValue:[UIColor orangeColor] forKeyPath:@"backgroundColor"];

            for (UIView *obj in tabbarbutton.subviews) {

                NSLog(@"obj:%@",obj);

                obj.backgroundColor = [UIColor redColor];

                for (UIView *v1 in obj.subviews) {

                    NSLog(@"v1_____:%@",v1);

                    if ([v1 isKindOfClass:NSClassFromString(@"_UIBackdropEffectView")]) {

                        v1.backgroundColor = [UIColor blueColor];

                        [v1 removeFromSuperview];

                    }

                }

                if ([obj isKindOfClass:NSClassFromString(@"_UIBackdropView")]) {

                    [obj removeFromSuperview];

                }

            }

        }

        if ([tabbarbutton isKindOfClass:NSClassFromString(@"UITabBarButton")]) {

            for (UIView *view in tabbarbutton.subviews) {

//                NSLog(@"%@",view);

                if ([view isKindOfClass:NSClassFromString(@"UITabBarSelectionIndicatorView")]) {

                    view.backgroundColor = [UIColor redColor];

                    view.layer.borderWidth = 2;

                    view.layer.borderColor = [UIColor blackColor].CGColor;

                }

            }

        }

    }

 

遍历的正是上图的结构,中间那个加号按钮是我自己另外加上去的,其它四个则分别代表一个控制器的tabbar

控制器是使用这个方法添加上去的:

 

如果你不想用许多button、view定制tabbar,那你就需要彻底的了解系统tabbar的结构,然后再去修改他的控制属性和结构,这遍文章正是对UITabBar彻底的解剖

 

 

第一层的遍历结果:

 

<_UITabBarBackgroundView: 0x12fe364a0; frame = (0 0; 375 49); autoresize = W; userInteractionEnabled = NO; layer = <CALayer: 0x1702217c0>>

 

看这一个的frame为(0 0; 375 49)及名字,那肯定是tabbar的背景图了,这个背景图下边还有好几层view,所以如你遍历到时这里的时候去设置_UITabBarBackgroundView的背景色的话是看不见的,因为这个_UITabBarBackgroundView在倒数第二层,最底有一个view暂时还不知道是干什么的,结合代码看上图:

_UITabBarBackgroundView 的下层 >> _UIBackdropView  >>  _UIBackdropEffectView 此时如果去改_UIBackdropEffectView的backcolor的话,是能看出效果的,只是好像有自带的半透明效果无法改变,或者我们把_UIBackdropView这个view removeFromSuperview,再设置_UITabBarBackgroundView的backcolor就能看到效果了

 

 

这一个名字是UIButton。那肯定是我另外添加的中间那个按钮

<UIButton: 0x12fd12650; frame = (155.5 2.5; 64 44); opaque = NO; layer = <CALayer: 0x174223680>>

 

下面这四个UITabBarButton分别代表四个控制器的tabbar按钮

<UITabBarButton: 0x12fd14620; frame = (2 1; 90 48); opaque = NO; layer = <CALayer: 0x174223a80>>

<UITabBarButton: 0x12fd19d00; frame = (96 1; 90 48); opaque = NO; layer = <CALayer: 0x1742246e0>>

<UITabBarButton: 0x12fd1d7e0; frame = (190 1; 89 48); opaque = NO; layer = <CALayer: 0x174224e20>>

<UITabBarButton: 0x12fe2fba0; frame = (283 1; 90 48); opaque = NO; layer = <CALayer: 0x170233e80>>

 

下面这一个UIImageView则是整条tabbar上边边缘的一个view,一般这个我们不会去改它,如下图,红色线条的位置:

<UIImageView: 0x12fe1cab0; frame = (0 -0.5; 375 0.5); autoresize = W; userInteractionEnabled = NO; layer = <CALayer: 0x1702356a0>>

 

 

第二层的遍历结果:

UITabBarSelectionIndicatorView代表上图中竖直红色黑色的那块view,注意:这个view需要在设置了这个self.selectionIndicatorImage属性时才会存在

<UITabBarSelectionIndicatorView: 0x14f6278f0; frame = (0 0; 90 48); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x174224cc0>>

 

UITabBarSwappableImageView就是上图中红色方块的view

<UITabBarSwappableImageView: 0x14f52a440; frame = (0 0; 30 30); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x170221d80>>

 

UITabBarButtonLabel 就不用多说了,就是下面那个label了,看text也可以

<UITabBarButtonLabel: 0x14f528400; frame = (0 0; 26 16); text = '首页'; opaque = NO; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x170281180>>

 

<UITabBarSwappableImageView: 0x14f619f30; frame = (0 0; 30 30); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x174223840>>

<UITabBarButtonLabel: 0x14f61aa50; frame = (0 0; 26 16); text = '消息'; opaque = NO; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x17409eb90>>

 

<UITabBarSwappableImageView: 0x14f622080; frame = (0 0; 30 30); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x174223f80>>

<UITabBarButtonLabel: 0x14f6216d0; frame = (0 0; 26 16); text = '发现'; opaque = NO; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x17409f590>>

 

<UITabBarSwappableImageView: 0x14f6274b0; frame = (0 0; 30 30); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x174224ac0>>

<UITabBarButtonLabel: 0x14f626060; frame = (0 0; 13 16); text = ''; opaque = NO; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x17409fae0>>

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM