在 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
设置。或者只定义一个约束并相应地更改其上的常量。
假设我在 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
设置。或者只定义一个约束并相应地更改其上的常量。