首页 > 解决方案 > 如何在 iOS 13 中将 UISegmentedControl 的 backgroundColor 设置为白色

问题描述

iOS 13 对 UISegmentedControl 进行了一些更改,包括切换所选片段时非常漂亮的动画。但是我注意到它没有backgroundColor正确显示属性,它似乎总是有点色彩。

我已经看到了回答如何设置 theselectedSegmentTintColor等的问题,但我正在努力设置backgroundColorto say .white,无论我做什么,即使没有tintColor应用或应用类似的设置,它总是显示出一点灰色。将 设置backgroundColor为其他颜色显示相同的行为,但最明显的是白色。更神秘的是,虽然这种差异在 iOS 13 模拟器和运行 iOS 13 的物理设备上都出现了,但可视化调试器(在 XCode 11 GM2 中)并没有显示出这种差异!

这里有几个屏幕截图显示,即使 的backgroundColor设置UISegmentedControl为与后面显示的视图相同,backgroundColor它们也略有不同。

运行 iOS 13 的设备(白色背景颜色) 在此处输入图像描述

可视调试器中显示的相同视图/代码(白色背景颜色) 在此处输入图像描述

运行 iOS 13 的设备(蓝色背景颜色) 在此处输入图像描述

我已经尝试过backgroundImage按照此 SO 帖子中的建议应用 a 的建议:UISegmentedControl iOS 13 clear color但最终将样式恢复为它在 iOS 12 中的外观,并且您也失去了漂亮的动画。

非常感谢任何指导或建议!我还向 Apple 提交了错误报告,看看是否有任何结果。

标签: iosswiftuisegmentedcontrolios13

解决方案


我有同样的问题,没有很酷的方法可以解决它。所以我做了这个小解决方法。我不喜欢它,我并不为此感到自豪,但它确实有效。

func fixBackgroundSegmentControl( _ segmentControl: UISegmentedControl){
    if #available(iOS 13.0, *) {
        //just to be sure it is full loaded
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { 
            for i in 0...(segmentControl.numberOfSegments-1)  {
                let backgroundSegmentView = segmentControl.subviews[i]
                //it is not enogh changing the background color. It has some kind of shadow layer 
                backgroundSegmentView.isHidden = true 
            }
        }
    }
}

推荐阅读