我有一个uislider
,它带有一个标注气泡,其中心X在uislider
拇指的中心X上方。
我在iPhone 7上对其进行了测试,它可以完美运行,一旦拇指移动,它也可以在其他设备上完美运行。
我的问题是,在初始加载时,气泡和拇指应该像拇指移动时一样对齐,但是在诸如iPhone 8+或iPhone SE的设备上,气泡的中心x偏离拇指的中心x(+/- 20磅)。
我相信将两个对象对齐的计算是正确的,因为当您实际移动拇指时,它可以很好地工作,但是对拇指x进行初始计算的操作已关闭。对于某些控制台日志,拇指的X最初将读取为180 pts,但是在触摸时,第一个值实际上是201 pts。然后气泡会相应调整。
我正在为渐变等使用自定义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
}
}
答案 0 :(得分:0)
尝试在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