问题描述
我目前有一个带有标题视图的集合视图。标题视图按垂直顺序具有全宽图像、标题、副标题和全宽按钮。
在横向模式下(对于 iPad),我需要此视图的宽度为全宽的 80%。
private func setConstraints() {
var devWidth: CGFloat = 0.0
if UIDevice.current.orientation.isLandscape {
devWidth = view.width * 0.8
} else {
devWidth = view.height * 0.8
}
leadingCVAnchor = collectionView?.leadingAnchor.constraint(equalTo: view.leadingAnchor)
trailingCVAnchor = collectionView?.trailingAnchor.constraint(equalTo: view.trailingAnchor)
centerCVAnchor = collectionView?.centerXAnchor.constraint(equalTo: view.centerXAnchor)
widthCVAnchor = collectionView?.widthAnchor.constraint(equalToConstant: devWidth)
collectionView?.translatesAutoresizingMaskIntoConstraints = false
collectionView?.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
collectionView?.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
leadingCVAnchor?.isActive = true
trailingCVAnchor?.isActive = true
if UIDevice.current.userInterfaceIdiom == .pad {
if UIDevice.current.orientation.isLandscape {
centerCVAnchor?.isActive = true
widthCVAnchor?.isActive = true
leadingCVAnchor?.isActive = false
trailingCVAnchor?.isActive = false
} else {
leadingCVAnchor?.isActive = true
trailingCVAnchor?.isActive = true
}
} else {
leadingCVAnchor?.isActive = true
trailingCVAnchor?.isActive = true
}
}
同样在设备旋转时,我正在更新这些约束:
override func viewWillTransition(to size: CGSize,with coordinator: UIViewControllerTransitionCoordinator) {
if UIDevice.current.userInterfaceIdiom == .pad {
if UIDevice.current.orientation.isLandscape {
print("Orientation Landscape")
leadingCVAnchor?.isActive = false
trailingCVAnchor?.isActive = false
widthCVAnchor?.isActive = true
centerCVAnchor?.isActive = true
} else {
print("Orientation Portrait")
leadingCVAnchor?.isActive = true
trailingCVAnchor?.isActive = true
widthCVAnchor?.isActive = false
centerCVAnchor?.isActive = false
}
}
}
当我以纵向模式启动应用程序时,一切看起来都很好。如果我以横向模式启动应用程序也是如此。问题是当我旋转设备时。如果我是纵向并旋转到横向,我会看到标题的尺寸应该有,但在它上面,我看到标题的第二个版本,其尺寸是纵向模式。当我从横向移动到纵向时也会发生同样的情况。
我在包含集合视图的 viewController 中设置了以下内容:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
collectionView?.collectionViewLayout.invalidateLayout()
}
但它似乎对标题没有帮助。与 80% 宽度之间的转换导致此错误出现在集合视图的标题中,但我无法确定那是什么。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)