在 iOS 中隐藏视图并使用全屏重新排列其他视图

Hide view in iOS and rearrange other view with fullscreen

假设我在 iPhone 肖像上有这个布局设计。 标签(红色)和图像(蓝色)。

但我想在 iPhone 处于横向时采用这种方式。只有图像(蓝色)。

我尝试使用以下代码,但在 return 返回纵向后标签没有出现:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
 
    coordinator.animate(alongsideTransition: { (UIViewControllerTransitionCoordinatorContext) -> Void in

        let orient = UIDevice.current.orientation

        switch orient {
        case .portrait:
            print("Portrait")
            let ctop = NSLayoutConstraint(item: self.imageView, attribute: .top, relatedBy: .equal, toItem: self.view, attribute: .top, multiplier: 1, constant: 44)
            self.view.removeConstraint(ctop)
            self.labelView.isHidden = false
            break
        default:
            print("LandScape")
            let ctop = NSLayoutConstraint(item: self.imageView, attribute: .top, relatedBy: .equal, toItem: self.view, attribute: .top, multiplier: 1, constant: 0)
            self.view.addConstraint(ctop)
            self.labelView.isHidden = true
            break
        }
        }, completion: { (UIViewControllerTransitionCoordinatorContext) -> Void in
            print("rotation completed")
    })
}

您的 addConstraint/removeConstraint 逻辑搞混了。在 Portrait 的情况下,您定义了一个新的 cTop 约束并将其从视图中删除 (!?!) - 您可能想要添加它。

最好在创建视图时立即定义这两个约束,并且只将一个设置为活动 - 然后根据您的新方向切换两个约束的 isActive 设置。或者只定义一个约束并相应地更改其上的常量。