一些UI设置总结
一个视图既要圆角又要阴影效果
因为设置圆角需要设置maskToBounds为YES,而要设置阴影则maskToBounds为NO,二者不可兼得
解决方法:
- A为父视图,B为子视图,设置B与A的约束边距都为0;
- 设置A的背景色为clearColor,设置A的阴影效果
- 设置B的背景色为视图实际背景色,设置B的圆角
另外发现一种更简单的方式:
需要设置UIView.layer.masksToBounds = NO并且设置UIView.layer.borderWidth = CGFLOAT_MIN即可,某些自定义view在这样设置之后如果仍然无法实现,尝试下设置背景色即可。
convertRect的正确使用
示例代码:
1
CGRect rect = [self.loginLoanView convertRect:self.loginLoanView.selectBtn.frame toView:self.view];
把
self.loginLoanView.selectBtn
在self.loginLoanView
中的frame
转化成selectBtn
相对self.view
的frame
即 拿到
self.loginLoanView
中的selectBtn
相对self.view
的位置(x,y)和大小(width,height)xib视图获取子视图frame问题
问题描述:
controller的xib上拖拽一个子视图A,A上有个子视图B,添加约束,该controller被present出来后,获取B相对controller.view的frame,即:CGRect rect = [A convertRect:B.frame to:controller.view],如果拿到这个rect后,根据这个rect添加子视图到controller.view上显示的视图位置是不对的。
解决方法:
给子视图A另开一个xib,然后代码添加到controller.view上,即可。
present通讯录列表页面,顶部title和取消按钮被状态栏遮挡问题
问题描述:
当前controller使用了全局变量来标记将要present的通讯录列表,第一次present后视图正常,再次present通讯录列表页的顶部不仅被遮挡,而且会展示controller的部分内容,非常错乱。
解决方法:
去掉全局变量,使用局部变量
iOS12.1中,
viewController.hidesBottomBarWhenPushed = YES
,push某个页面后返回时,tabbar
的显示会发生错乱。原因:UITabBar是磨砂的,在
pushViewController
时设置viewController.hidesBottomBarWhenPushed = YES
时,tabbar
内的按钮UITabBarButton
被设置了错误的frame
,frame.size
会变成(0,0)。解决方法:设置
[UITabBar appearance].translucent = NO;
将tabbar设置为非磨砂效果。导航条图片渲染模式默认为
default
,得到的图片是蓝色的,可以直接设置图片属性render as
为Original
,或者代码设置1
childController.tabBarItem.image = [[UIImage imageNamed:image] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];