滑块 - 开头和结尾的颜色不正确

Slider - incorrect color at the beginning and in the end

我有一个自定义滑块,我必须增加滑块的高度(厚度)。代码如下所示:

class CustomSlider: UISlider
{   
    override open func trackRect(forBounds bounds: CGRect) -> CGRect {
        var defaultBounds = super.trackRect(forBounds: bounds)
        let newHeight: CGFloat = 20
        
        return CGRect(x: defaultBounds.origin.x,
                      y: defaultBounds.origin.y + defaultBounds.size.height/2 - newHeight/2,
                      width: defaultBounds.size.width,
                      height: newHeight)
    }
}

高度增加了,但现在的问题是滑块在开始和结束时没有正确着色。例如,一开始它看起来像这样: wrong color at the beginning

在某个点之后颜色变得正确并填充蓝色:correct color after some point

最后出现了同样的问题,一开始一切正常:normal behavior

但是在某个时间点之后颜色过快地更新为蓝色:wrong color in the end

有没有人有过类似的经历?有解决办法吗?

我试过使用 setMinimumTrackImagesetMaximumTrackImage 而不是 minimumTrackTintColormaximumTrackTintColor,它有效,但我无法使用它,因为当我旋转屏幕时 - 滑块会拉伸我正在使用的图像也拉伸了,所以滑块的角半径看起来拉伸了并且与它必须的不一样。

还有一个有趣的事实是,滑块高度增加得越多 - 正确的颜色出现在开头的时间就越晚。

由于设置轨道图像有效,唯一的问题是拉伸角,后者可以通过在轨道图像上使用 resizableImage(withCapInsets:) 来解决,因此只有图像的中间部分会被拉伸,其余部分将保持不变。

这些文章非常详细地涵盖了该主题:

https://www.natashatherobot.com/ios-stretchable-button-uiedgeinsetsmake/

https://www.hackingwithswift.com/example-code/media/how-to-make-resizable-images-using-resizableimagewithcapinsets