UISlider 的 minView 超出了它的边界和拇指的中心

Posted

技术标签:

【中文标题】UISlider 的 minView 超出了它的边界和拇指的中心【英文标题】:UISlider's minView goes beyond it's bounds and thumb's center 【发布时间】:2018-10-12 04:28:52 【问题描述】:

我想要一个自定义滑块,要求 minView 的高度应该是 8 pt,而 maxView 应该是 4 pt,可见角应该是圆角的。

我将滑块的最小和最大图像作为 0.0 的 alpha 清晰图像给出

对于 maxView,我创建了一个 UIView 并赋予它与滑块宽度相等的宽度,并使其角为圆形。

对于minView,我创建了一个UIView,它的前导等于滑块的前导,尾随应该等于拇指的中心。

这是我所做的逻辑。

func changeValue() 
    let difference = slider.maximumValue - slider.minimumValue
    let thumbWidth = CGFloat(44/2)
    let scale = (slider.frame.size.width-thumbWidth)/CGFloat(difference)
    let width = scale * CGFloat(slider.value)
    minSlideWidth.constant = width
    self.view.layoutIfNeeded()

但是 minView 的宽度不会随着拇指的中心而增加和减少。如果您看到图像已经穿过 UIslider 的拇指。

【问题讨论】:

为什么要使用附加视图?使用setMinimumTrackImagesetMaximumTrackImage 我做了,圆角不好看。 你指的是哪个圆角? Slider 的 minImage 和 maxImage 的圆角。 【参考方案1】:

这种方法怎么样?

配置UISlide control的属性。

    setMinimumTrackImage 8pt 图片。 setMaximumTrackImage 4pt 图片。

stretchable image 可以重新创建轨道图像以保持圆角。您可以在UIImage reference 的Defining a Stretchable Image 部分找到它。它对于滑动条的轨迹图像非常有用。

【讨论】:

好的,我试试看,但我的逻辑有什么问题?为什么会超出拇指?你能帮帮我吗? 我想你应该通过它的方法得到滑动轨迹栏框架:trackRect(forBounds:)。控制框不等于中间轨迹栏的框。 或者,您可以通过thumbRect(forBounds:trackRect:value:) 获取拇指图像的中心。

以上是关于UISlider 的 minView 超出了它的边界和拇指的中心的主要内容,如果未能解决你的问题,请参考以下文章

我的网站在 Firefox 中无法运行 - 文本超出边距

UISlider - 缺少功能 - 捕捉、工具提示和刻度

iOS 7.1 中的 UISlider setMaximumTrackTintColor

cuckoo crp-g1031mp电饭锅可以炖排骨吗

css - 打印的页面文本在分页符时超出块

UISlider 拇指图像像素化