iOS开发中修改UISwitch背景色出现外轮廓的问题该如何解决
问题解决方法
根因说明
UISwitch自带内部层级结构,本身视图尺寸和内部可显示区域存在细微边距差,直接给控件本身设置backgroundColor+和高度等高的圆角裁切,无法完全覆盖边缘多余背景,就会露出黄色外轮廓。
解决方案
方案1(官方推荐,无适配问题)
使用UISwitch原生提供的offTintColor属性配置关闭状态下的背景色,无需手动裁切圆角,原生属性自带的样式完全匹配开关圆角,不会出现漏色问题,调整后代码如下:
self.toggleSwitch.onTintColor = UIColor.redColor; // 用offTintColor配置关闭状态背景,替换原backgroundColor设置 self.toggleSwitch.offTintColor = UIColor.yellowColor; // 原手动设置圆角、裁切的两行代码可以直接删除
方案2(适配自定义backgroundColor需求)
如果确实有特殊场景需要直接给UISwitch设置backgroundColor,可以将圆角值比高度的一半小1~2像素,抵消边距差即可解决漏色问题,调整后代码如下:
self.toggleSwitch.onTintColor = UIColor.redColor; self.toggleSwitch.backgroundColor = UIColor.yellowColor; // 圆角值减1即可避免边缘漏色 self.toggleSwitch.layer.cornerRadius = self.toggleSwitch.frame.size.height / 2 - 1; self.toggleSwitch.clipsToBounds = YES;
内容的提问来源于stack exchange,提问作者Sanich
相关产品推荐
相关产品推荐

