【问题标题】:UISlider Handle Changes Width on Different Size iPadsUISlider 手柄在不同尺寸的 iPad 上更改宽度
【发布时间】: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 尺寸上都等于其父视图的宽度?

【问题讨论】:

    标签: swift ipad interface-builder constraints uislider


    【解决方案1】:

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

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

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

    但是,这解决了问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-21
      • 2016-06-07
      • 1970-01-01
      • 2011-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多