当设备旋转而不将设备锁定为纵向模式时,如何将 collectionView 的所有项目保持在适当的位置?
Posted
技术标签:
【中文标题】当设备旋转而不将设备锁定为纵向模式时,如何将 collectionView 的所有项目保持在适当的位置?【英文标题】:How do you hold all the items of a collectionView in place when the device rotates without locking the device in portrait mode? 【发布时间】:2018-09-28 19:06:47 【问题描述】:我想构建一个collectionView,当用户旋转设备而不将设备的方向锁定为纵向模式时,它将所有单元格保持在适当的位置。我曾尝试使布局无效,但无济于事。感谢您的帮助。
【问题讨论】:
仅在 info.plist 中将支持的界面方向设置为纵向? @AshleyMills 我还想允许应用检测何时处于横向模式 您还有其他需要在两个方向上工作的屏幕? @AshleyMills 在某种意义上是的,我希望他们能够检测到它们何时处于横向模式,但我不希望屏幕旋转或 collectionView 屏幕上的任何项目在发生旋转 我不确定我是否理解 - 如果屏幕不旋转,您为什么想知道设备是否处于横向? 【参考方案1】:根据您的评论,您希望所有屏幕都保持纵向,但要知道设备是否处于横向而不旋转界面(对于相机屏幕),您应该……
在your info.plist
中将支持的界面方向设置为纵向
使用CMMotionManager
检测设备方向...
let motionManager = CMMotionManager()
var currentOrientation = UIDeviceOrientation.portrait
func montiorOrientation()
motionManager.startAccelerometerUpdates(to: OperationQueue()) data, error in
if let error = error
print("CM orientation error - \(error)")
return
let acceleration = data!.acceleration
let orientation: UIDeviceOrientation = fabs(acceleration.y) < fabs(acceleration.x) ?
(acceleration.x > 0 ? .landscapeRight : .landscapeLeft) :
(acceleration.y > 0 ? self.currentOrientation : .portrait) // Ignore portraitUpsideDown
if orientation != self.currentOrientation
DispatchQueue.main.async
self.currentOrientation = orientation
【讨论】:
以上是关于当设备旋转而不将设备锁定为纵向模式时,如何将 collectionView 的所有项目保持在适当的位置?的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式将我的 android 应用程序锁定为纵向/横向模式?