tabBar 变色 引发的血案

关键点:

tabBar.translucent  透明度属性 (导航栏色差等问题)

控制器的edgesForExtendedLayout属性

案情提要:

controller的view设置灰色后,底部tabbar也变灰色 (根本原因并不是controller设置灰色)

案情分析:

1,controller添加scrollView后,scrollview内部子控件发生形变

  解决:controller中 self.edgesForExtendedLayout = UIRectEdgeNone;

2,设置上面属性后,tabbar和controller的背景色一样成灰色

  原因:设置以上属性后controller的view的布局为navigationbar和tabbar中间部分,tabbar为半透明呈现出本来的灰色,controller的背景设置为灰色所以看起来是由于设置controller的背景色引起的

  解决:self.tabBarController.tabBar.translucent=NO;

背后思考:

  1,tabbar 和 navigationbar 的 translucent 属性

常见问题:导航栏色差,截图后导航栏出现64的黑色区域

--->  translucent属性能决定UITabBar/UINavigationBar是否为半透明的效果,默认yes为半透明,设置no时不透明(白色) (设置bar为透明时,setBackgroundImage 为[UIImage new])

--->  为UITabBar/UINavigationBar 设置颜色:setTintColor 或者 setbackgroundImage


2,controller 的 edgesForExtendedLayout 属性

--->  延展布局,默认为:UIRectEdgeAll,即:如果即使视图中上有navigationBar,下有tabBar,那么视图仍会延伸覆盖到四周的区域

--->  UIRectEdgeNone: navigationBar 和 tabBar 之间的 view

--->  UIRectEdgeTop:tabbar  和屏幕最顶端之间的 view

--->  UIRectEdgeBottom:navigationBar 和屏幕最低端的 view

3,navigationcontroller 的 automaticallyAdjustsScrollViewInsets 属性

--->  默认YES,scrollView及其子控件下移64,保证不被导航栏 & 状态栏覆盖

--->  导航栏 & 状态栏覆盖默认是半透明的,所以向上滑动时导航栏 & 状态栏覆盖会有阴影       

      解决:UINavigationBar 的 translucent 为NO  /  controller 的    edgesForExtendedLayout 为 UIRectEdgeNone

你可能感兴趣的:(tabBar 变色 引发的血案)