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

Swift UISlider手柄在不同尺寸的iPad上更改宽度,swift,ipad,interface-builder,constraints,uislider,Swift,Ipad,Interface Builder,Constraints,Uislider,我有一个垂直滑块,它使用以下代码在其自定义类中生成句柄图像: 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)!) retu

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

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中为滑块设置了自动布局约束,使其在superview的x&y轴上居中,并且宽度和高度与superview的高度和宽度相等(因为它是垂直滑块)

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

// 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)
我希望控制柄图像等于其superview的宽度。它在iOS模拟器中的iPadAir 2上正确地做到了这一点,但在iPadPro 12.9上,它大约是superview宽度的80-90%,在iPadAir上,它略大于superview的宽度


如何使自定义滑块图像句柄的宽度与所有iPad尺寸上的superview宽度相等?

通过尝试和错误,我发现这是一个“时间问题”。句柄图像矩形在
viewDidLoad
中绘制得太快

我的“黑客”解决方案是将绘制滑块手柄的函数放入按钮操作函数中,按钮操作函数调用视图显示(其中包含垂直滑块)

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

然而,这解决了问题