UISlider 手柄在不同尺寸的 iPad 上更改宽度

Posted

技术标签:

【中文标题】UISlider 手柄在不同尺寸的 iPad 上更改宽度【英文标题】:UISlider Handle Changes Width on Different Size iPads 【发布时间】:2017-01-19 05:16:38 【问题描述】:

我有一个垂直滑块,它使用以下代码在其自定义类中生成句柄图像:

func generateHandleImage(with color: UIColor) -> UIImage 


    let rect = CGRect(x: 0, y: 0, width: (superview?.bounds.size.height)! * 0.07,
                      height: (superview?.bounds.size.width)!)


    return UIGraphicsImageRenderer(size: rect.size).image  (imageContext) in
        imageContext.cgContext.setFillColor(color.cgColor)
        imageContext.cgContext.fill(rect.insetBy(dx: 0, dy: 0))
    

我已经在 IB 中为滑块设置了自动布局约束,使其在其父视图的 x 和 y 轴上居中,并且宽度和高度与它的父视图的高度和宽度相等(因为它是一个垂直滑块)。

这是使我的滑块垂直并调用函数生成句柄图像的代码:

// Make Sliders Vertical
    let sliderTransform = CGAffineTransform(rotationAngle: CGFloat(M_PI_2) + CGFloat(M_PI))
    pitchBendSlider.transform = sliderTransform

    pitchBendSlider.setThumbImage(pitchBendSlider.generateHandleImage(with: .white), for: .normal)

我希望句柄图像等于其父视图的宽度。它在 ios 模拟器中的 iPad Air 2 上正确执行此操作,但在 iPad Pro 12.9" 上它大约是超级视图宽度的 80-90%,而在 iPad Air 上它比超级视图的宽度略大。

如何使自定义滑块的图像句柄的宽度在所有 iPad 尺寸上都等于其父视图的宽度?

【问题讨论】:

【参考方案1】:

通过反复试验,我发现这是一个“时间问题”。 viewDidLoad 中的句柄图像矩形绘制得太早了。

我的“hack”解决方案是将绘制滑块句柄的函数放入调用视图出现的按钮操作函数中(其中包含垂直滑块)。

添加时间延迟可能会解决同样的问题。两者都是黑客解决方案,我仍然不了解为什么在包含垂直滑块的 VC 中调用 viewDidLoad 之前无法识别正确的屏幕尺寸...

但是,这解决了问题。

【讨论】:

以上是关于UISlider 手柄在不同尺寸的 iPad 上更改宽度的主要内容,如果未能解决你的问题,请参考以下文章

限制滑动 UISlider 超过某个点

针对不同 iPad 尺寸的不同 UI

iphone/ipad 自定义 UISlider 控制器

如何以不同的 iPhone/ipad 尺寸将我的应用程序上传到 App Store

我怎么知道iPad上的分割窗拖动手柄何时出现?

UISlider 不流畅