如何将ios 13 UISegmentedControl背景颜色设置为白色?

2024-02-16

我正在尝试在 iOS 13 中为正常状态设置分段控件的背景颜色。

我有与此处列出的相同的问题:如何在 iOS 13 中将 UISegmentedControl 的背景颜色设置为白色 https://stackoverflow.com/questions/58105920/how-to-set-backgroundcolor-of-uisegmentedcontrol-to-white-in-ios-13

上面链接中问题的答案没有帮助。我想保持 ios13 幻灯片动画行为,但也让正常状态段为白色而不是浅灰色。

分段控件中似乎有一个默认图像导致灰色/灰白色着色效果。

我尝试将背景图像设置为选定状态的颜色和 UIBarMetrics.default 的正常颜色,但这只是给了我 ios13 之前的行为

if #available(iOS 13, *) {
    guard let selectedTintColor = selectedSegmentTintColor else { return }

    let tintColorImage = selectedTintColor.asImage()
    let backgroundColor = self.backgroundColor ?? UIColor.clear

    setBackgroundImage(backgroundColor.asImage(), for: .normal, barMetrics: .default)
    setBackgroundImage(tintColorImage, for: .selected, barMetrics: .default)
    setBackgroundImage(selectedTintColor.withAlphaComponent(0.2).asImage(), for: .highlighted, barMetrics: .default)
    setBackgroundImage(tintColorImage, for: [.highlighted, .selected], barMetrics: .default)
}


extension UIImage {
     func asImage(_ size: CGSize = CGSize(width: 1, height: 1)) -> UIImage {
        return UIGraphicsImageRenderer(size: size).image { rendererContext in
            self.setFill()
            rendererContext.fill(CGRect(origin: .zero, size: size))
        }
    }
}

//I also added the following to the View

override func layoutSubviews() {
    super.layoutSubviews()

    subviews.compactMap{ $0 as? UIImageView }.forEach {
        $0.isHidden = $0.image == nil
    }
}

使用最后一部分(layoutSubviews),我能够在进行分段选择之前看到白色背景颜色。在segmentedControlDidChange调用之后,白色消失了,并且默认选定的段在更改后也变成了灰色。但已经看不到任何文字了...

此信息来自我的视图调试器: segmentedCOntrol 的 bgColor 为白色 -> 并且它包含 uiImageView 用于具有清晰图像且 bgColor 为零的所有片段

上面提到的 ^^ uiImageView 之上的所选片段具有正确的 selectedSegmentTintColor 作为附加 uiImageView,并且背景颜色仍然为零,但图像中具有正确的色调颜色

经过我的努力,我得到了与上面链接中的人相同的行为。在视图层次结构中,它将背景显示为白色,视觉表示显示正确的颜色。

这是一个错误吗?有谁知道如何克服这个问题?


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将ios 13 UISegmentedControl背景颜色设置为白色? 的相关文章

随机推荐