ios – 方向更改后UIView框架未更新

前端之家收集整理的这篇文章主要介绍了ios – 方向更改后UIView框架未更新前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
使用 Swift 3后如何检测方向变化?

我需要在更改后检测它以计算帧大小.

编辑:

我问了这个问题,因为我需要重新定位方向更改的视图,就像这个问题:Can’t get background gradient to fill entire screen upon rotation

我不知道如何实现标记为正确答案的答案.

我尝试了另一个答案

self.backgroundImageView.layer.sublayers?.first?.frame = self.view.bounds

但它不起作用.

在viewDidLoad()中我有

let color1 =  UIColor(red: 225.0/255.0,green: 210.0/255.0,blue: 0.0/255.0,alpha: 1.0).cgColor
        let color2 = UIColor(red: 255.0/255.0,green: 125.0/255.0,blue: 77.0/255.0,alpha: 1.0).cgColor

        let gradientLayer = CAGradientLayer()
        gradientLayer.colors = [color1,color2]
        gradientLayer.locations = [ 0.0,1.0]
        gradientLayer.frame = self.view.bounds

        self.view.layer.insertSublayer(gradientLayer,at: 0)

解决方法

上面接受的答案在转换之前返回帧大小.所以你的视图没有更新.你需要在转换完成后获得帧大小.
override func viewWillTransition(to size: CGSize,with coordinator: UIViewControllerTransitionCoordinator) {

        coordinator.animate(alongsideTransition: { (UIViewControllerTransitionCoordinatorContext) -> Void in

            let orient = UIApplication.shared.statusBarOrientation

            switch orient {

            case .portrait:

                print("Portrait")

            case .landscapeLeft,.landscapeRight :

                print("Landscape")

            default:

                print("Anything But Portrait")
            }

            },completion: { (UIViewControllerTransitionCoordinatorContext) -> Void in
                //refresh view once rotation is completed not in will transition as it returns incorrect frame size.Refresh here           

        })
        super.viewWillTransition(to: size,with: coordinator)

    }

猜你在找的iOS相关文章