gpt4 book ai didi

swift - 检测平面横向/纵向方向

转载 作者:搜寻专家 更新时间:2023-11-01 05:43:43 24 4
gpt4 key购买 nike

有没有办法检测设备是平面横向还是平面纵向设备?

我问这个是因为我的 UIViewController 中有 UICollectionView 并且在纵向模式下,单元格排成一行。在 Landscape 中,它们只在一列中——它们从水平方向换成了垂直方向。我每 60 秒更新一次收集数据。这段时间之后必须调用 reloadData() 来实现数据,如果我将设备 * 保持在平面方向,布局将被破坏,因为 sizeForItemAt。没有任何条件是完美的。

let isPortrait = UIDevice.current.orientation.isPortrait
if !isPortrait {
return CGSize(width: collectionView.bounds.width, height: collectionView.bounds.height / 4)
} else {
return CGSize(width: collectionView.bounds.width / 4, height: collectionView.bounds.height)
}

没有办法像这样放置:

let isFlat = UIDevice.currentorientation.isFlat
if isFlat && isPortrait {
//
}

isPortraitisFlat 不能同时出现。

有解决办法吗?

最佳答案

在我看来,要解决它,您应该保存项目的最后一个尺寸。当我们的设备保持平坦时,sizeForItemAt 将返回项目的最后一个尺寸。

var currentSize : CGSize?

override func viewDidLoad() {
super.viewDidLoad()

// In viewDidLoad, need to set default value for currentSize. Make sure in case
// your app start at flat orientation, you collectionView still has a size
currentSize = CGSize(width: collectionView.bounds.width, height: collectionView.bounds.height / 4);
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
if UIDevice.current.orientation.isPortrait {
currentSize = CGSize(width: collectionView.bounds.width, height: collectionView.bounds.height / 4)
} else if UIDevice.current.orientation.isPortrait {
currentSize = CGSize(width: collectionView.bounds.width / 4, height: collectionView.bounds.height)
}
return currentSize;
}

仅当您的设备处于纵向或横向模式时更新 currentSize 的值。如果不是,则使用项目的当前大小。

关于swift - 检测平面横向/纵向方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47312292/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com