嵌套视图不遵守旋转父级的约束(转换)

时间:2018-01-26 12:16:28

标签: ios swift constraints

我有视频视图(父级)和带控件的嵌套视图(全屏按钮)

我基本上正在尝试制作全屏按钮,视图旋转并变为全屏。父视图没有任何问题,但子视图不遵守约束。 它与父节点一起旋转,但宽度和位置不适应变换。

子视图需要固定在前导+尾随+底部。具有固定的高度。

父视图也包含在包含视图中。

(videoView是父视图)

UIView.animate(withDuration: 0.6, animations: {

            //Set the default frames ready to restore..
            self.videoViewFrame = self.videoView.frame
            self.videoViewButtonFrame = self.videoButtonView.frame


            self.navigationController?.navigationBar.layer.zPosition = -1
            self.navigationController?.setNavigationBarHidden(true, animated: true)

            self.tabBarController?.tabBar.layer.zPosition = -1
            self.tabBarController?.tabBar.isHidden = true


            self.videoView.transform = CGAffineTransform(rotationAngle: CGFloat(M_PI / 2))

            self.videoView.frame = UIScreen.main.bounds

            UIApplication.shared.keyWindow?.windowLevel = UIWindowLevelStatusBar
        }

我尝试了不同的约束设置。

  • 设置前导,尾随和底部
  • 在videoView父级中设置相等的宽度和居中位置

子视图与父视图一起旋转,但不会根据需要限制在底部,左侧,右侧。

以下是控制器内的裁剪较小视图(纵向)

这是全屏,控件未根据需要固定 enter image description here

如果我记录子视图的约束,则动画后约束仍然存在。日志中也没有错误 但是,如果我尝试更改子视图的框架,它将不会让我。 在变换发生之前,似乎约束被困在了位置? setNeedsLayout或setNeedsUpdateConstraints不会改变任何内容

1 个答案:

答案 0 :(得分:1)

原来我需要使用autoresizingMask

self.videoButtonView.translatesAutoresizingMaskIntoConstraints = true
self.videoButtonView.autoresizingMask = [.flexibleWidth, .flexibleTopMargin]

self.fullScreenButton.translatesAutoresizingMaskIntoConstraints = true
self.fullScreenButton.autoresizingMask = [.flexibleLeftMargin]