【问题标题】:UINavigationBar or statusBarHeight -> 0 when CGAffineTransform applied to viewController.viewUINavigationBar 或 statusBarHeight -> 0 当 CGAffineTransform 应用于 viewController.view
【发布时间】:2020-09-23 00:04:45
【问题描述】:

我正在通过UIViewControllerAnimatedTransitioning 编写交互式过渡。作为过渡的一部分,我将CGAffineTransform 应用到from view controller

一旦应用了转换,fromViewController 就会失去其顶部的 safeAreaInset。这看起来很刺耳。

这是过渡开始前的照片。正常状态栏、导航栏和安全区域插图(顶部)。高约88点。

这是过渡的第一帧。请注意,顶部间距现在更像 44 磅。

fromVC 在整个转换过程中一直保持这种方式。我尝试了不同的应用转换方式,但它们的行为方式都相同。我还删除了圆角。

这里是变换:

var transform = CGAffineTransform.identity
            transform.concatenating(CGAffineTransform.identity.translatedBy(x: 0, y: yInset / 2))
            transform.concatenating(CGAffineTransform.identity.scaledBy(x: scaleX, y: scaleY))

fromVC.view.transform = transform

【问题讨论】:

    标签: uiviewcontroller uikit cgaffinetransform safearealayoutguide uiviewpropertyanimator


    【解决方案1】:

    我最终解决这个问题的方法是使用CATransform3D 而不是CGAffineTransform。使用这种技术,填充保持在原位。

    let scale = CATransform3DScale(CATransform3DIdentity, scaleX, scaleY, 1)
    let translate = CATransform3DTranslate(scale, 0, yInset / 2, 0)
    return CATransform3DConcat(scale, translate)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多