首页 > 解决方案 > UISlider 跟踪标注未与拇指对齐

问题描述

我有uislider一个标注气泡,其中心 X 位于uislider拇指中心 X 上方。

我在 iPhone 7 上对其进行了测试,它运行良好,并且一旦移动拇指,它也可以在其他设备上完美运行。

我遇到的问题是,在初始加载时,气泡和拇指应该像移动拇指时一样对齐,但是在 iPhone 8+ 或 iPhone SE 等设备上,气泡的中心 x 偏离拇指的中心 x (+/- 20 分)。

我相信使两个对象对齐的计算是正确的,因为当您实际移动拇指时它可以正常工作,但是拇指 x 的初始计算是关闭的。对于一些控制台日志,拇指的 X 最初读取为 180 点,但在触摸时第一个值实际上是 201 点。然后气泡会相应调整。

我正在uislider为渐变等使用自定义子类,这可能会影响它(?)但它在触摸时仍然如何工作令人困惑。

任何帮助,将不胜感激。

在 viewDidLoad 上(主要约束是安全区域):

distanceSlider.setValue(Float(sliderValue), animated: false)

distanceCalloutViewLeadingConstraint.constant = distanceSlider.thumbCenterX - (distanceCalloutView.center.x - distanceCalloutView.frame.minX)

关于距离变化:

distanceCalloutViewLeadingConstraint.constant = distanceSlider.thumbCenterX - (distanceCalloutView.center.x - distanceCalloutView.frame.minX)

拇指中心 X 扩展:

extension UISlider {
    var thumbCenterX: CGFloat {
        let trackRect = self.trackRect(forBounds: frame)
        let thumbRect = self.thumbRect(forBounds: bounds, trackRect: trackRect, value: value)
        return thumbRect.midX
    }
}

标签: iosswiftuislider

解决方案


尝试在下面的行中设置viewDidLayoutSubviews()。看起来添加了滑块的视图没有正确布局其大小。

distanceCalloutViewLeadingConstraint.constant = distanceSlider.thumbCenterX - (distanceCalloutView.center.x - distanceCalloutView.frame.minX)

为什么要使用自定义图像并根据滑块值进行调整。你可以直接使用

func setThumbImage(_ image: UIImage?, for state: UIControl.State) 检查参考苹果文档链接 https://developer.apple.com/documentation/uikit/uislider/1621336-setthumbimage


推荐阅读