【问题标题】:How to resize a view across all screen sizes?如何在所有屏幕尺寸上调整视图的大小?
【发布时间】:2019-09-02 14:58:12
【问题描述】:

我正在创建一个简单的计时器应用程序,并希望将计时器圆圈的大小调整为带有圆角的视图的大小。计时器路径添加在背景视图类中。

在我的 iPhone XS Max 上,它看起来像这样:

但是,在 iPhone SE 模拟器上,它看起来像这样:

如何确保计时器圈正确调整大小?

这是我用于调整圆形路径大小的代码:

private func addTimerCircle() {
    let translateAmount = -(CGFloat.pi/2)

    let circlePath = UIBezierPath(arcCenter: CGPoint.zero, radius: (self.frame.width - 64)/2, startAngle: translateAmount, endAngle: (2*CGFloat.pi)+translateAmount, clockwise: true)

    addTrackLayer(withPath: circlePath)
}

private func addTrackLayer(withPath circlePath: UIBezierPath) {
    let trackLayer = CAShapeLayer()

    trackLayer.path = circlePath.cgPath

    trackLayer.strokeColor = UIColor.red.withAlphaComponent(0.5).cgColor
    trackLayer.lineWidth = 10
    trackLayer.position = CGPoint(x: frame.size.width / 2, y: frame.size.height / 2)
    trackLayer.fillColor = UIColor.clear.cgColor
    layer.addSublayer(trackLayer)
}

为什么circlePath 不根据frame.width 在不同的屏幕尺寸上调整大小?

感谢您的帮助!

【问题讨论】:

    标签: ios swift uiview autolayout


    【解决方案1】:

    视图控制器视图以它们在 Interface Builder 中的大小加载,一旦将它们添加到层次结构中,视图就会调整为实际大小。

    我猜你是在viewDidLoad() 上调用addTimerCircle(),这发生在应用最终大小之前。

    您可以覆盖viewDidLayoutSubviews(),它会在视图大小更改时调用,并在那里添加/更新形状,但我的建议是继承UIView,将形状图层添加为属性,然后更新它框架在layoutSubviews

    【讨论】:

      猜你喜欢
      • 2021-05-07
      • 2012-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-16
      • 2019-12-12
      • 2012-12-28
      • 1970-01-01
      相关资源
      最近更新 更多