UITabBar,uitabbarcontroller

來源:互聯網
上載者:User

UITabBar,uitabbarcontroller

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>>

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.