如何在iOS 13中将UISegmentedControl的backgroundColor设置为白色

Phi*_*hil 9 uisegmentedcontrol ios swift ios13

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

我已经看到了问题,这个问题的答案如何设置selectedSegmentTintColor等,但我挣扎,设置backgroundColor地说.white,不管我做什么,它总是显示了一个有点灰色的,即使没有tintColor或应用类似的设置。将设置backgroundColor为其他颜色可显示相同的行为,但用白色最为明显。更令人迷惑的是,虽然这种差异在iOS 13模拟器和运行iOS 13的物理设备上均会显示,但视觉调试器(在XCode 11 GM2中)却没有显示出这种差异!

这是一些屏幕截图,显示即使将backgroundColorUISegmentedControl设置为与backgroundColor后面显示的视图相同,也有些许不同。

运行iOS 13的设备(白色backgroundColor) 在此处输入图片说明

Visual Debugger中显示的视图/代码相同(白色backgroundColor) 在此处输入图片说明

运行iOS 13的设备(蓝色backgroundColor) 在此处输入图片说明

我已经尝试过按照backgroundImage这篇SO文章中的建议使用的建议:UISegmentedControl iOS 13清除颜色,但是最终将样式恢复为在iOS 12中的外观,同时也会丢失漂亮的动画。

任何指导或建议,不胜感激!我还向Apple提交了错误报告,将看看是否有任何问题。

小智 18

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

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 
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 使用此代码,我的分段控件会丢失文本,但灰色覆盖层仍然存在。 (2认同)