ios - UISlider 跟踪标注未与拇指对齐

标签 ios swift 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
    }
}

最佳答案

尝试在 viewDidLayoutSubviews() 中设置以下行。看起来添加了 slider 的 View 未正确布局其大小。

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

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

func setThumbImage(_ image: UIImage?, 对于状态:UIControl.State) 检查引用苹果文档链接https://developer.apple.com/documentation/uikit/uislider/1621336-setthumbimage

关于ios - UISlider 跟踪标注未与拇指对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52673412/

相关文章:

ios - UIButton 的系统镜像出现在 iOS14 中,但不在 iOS13 中

ios - Swift 在模态和推送 Segue 之间保持导航

ios - AVFoundation - 检测面部和裁剪面部区域?

iphone - 如何使用 GET 方法 JSON Objective C 在 NSRequestURL 中传递特殊字符(如 #、@、%、$)

swift - .onDrop() 修饰符中的文件夹 URL

ios - UITableViewCell,在切换时隐藏和显示它们

iphone - UISlider minimumValueImageRectForBounds : and super maximumValueImageRectForBounds returns empty rectangle

iphone - 可以像iPhone中的 "unlock slider"一样自定义UISlider吗?

ios - 如何调整 slider (从 0 到 70)

ios - UICollectionView 和自动布局