关键点:
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