ios - 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()
。看起来添加了滑块的视图没有正确布局其大小。
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
推荐阅读
- sapui5 - 禁用 sap.f.semantic.SemanticPage 中的滚动条
- c# - 从 HomeWindow 注销到 MainWindow
- r - 在 ggplot2 主干图中排列条形图
- c++ - 变量的浅蓝色突出显示
- amazon-web-services - 我已经用我自己的用户池设置了 AWS cognito,当我创建一个具有美国电话号码的用户时,我没有在电话上收到验证短信
- javascript - 在while循环中计算JQuery
- python - Python & 排序:对复杂数组中的元素进行排序
- javascript - 如何添加显示已选中复选框的总值
- javascript - Javascript 中的电话号码验证,用于按键上的特定格式
- php - 为了从服务器发送 Firebase 推送通知,应该允许什么 FQDN?