[英]Swift UICollectionView iPad Flow Layout Not Working
当前在iPad上使用集合视图时,Flow布局存在一些问题。 我目前正在开发一个应用程序,该应用程序以流布局显示帖子,使它看起来既美观又时尚。 但是,在所有设备上测试应用程序时,我注意到显示在以下位置发生了变化:
但是其余的iPad,则显示正确。 这里似乎是什么问题? 我目前正在使用以下代码在CollectionView中设置布局样式:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
switch UIDevice().screenType {
case .iPhoneX:
return CGSize(width: 180.0, height: 180.0)
break
case .iPhone5:
return CGSize(width: 152.0, height: 152.0)
break
case .iPhone6:
return CGSize(width: 180.0, height: 180.0)
break
case .iPhone6Plus:
return CGSize(width: 200.0, height: 200.0)
break
case .iPad:
return CGSize(width: 400.0, height: 400.0)
break
case .iPadTwo:
return CGSize(width: 400.0, height: 400.0)
break
case .iPadThree:
return CGSize(width: 400.0, height: 400.0)
break
default:
return CGSize(width: 200.0, height: 200.0)
break
}
}
“ iPad Two”和“ iPad Three”只是我尝试创建的一些枚举,目的是确定iPad的类型以及是否获得输出打印一些文本的信息(但它只是默认设置),而与iPad无关。
这是我的屏幕尺寸:
switch UIScreen.main.nativeBounds.height {
case 960:
return .iPhone4
case 1136:
return .iPhone5
case 1334:
return .iPhone6
case 2208:
return .iPhone6Plus
case 1024:
return .iPad
case 1366:
return .iPadTwo
case 834:
return .iPadThree
case 2436:
return .iPhoneX
break
default:
return .unknown
}
这是我的问题的直观表示,发生在列出的设备上,而不是在其余设备上:
它应该是什么样的:
在列出的设备上是什么样的:
如果有人可以帮助我解决此问题,我将非常感谢您的帮助,因为我似乎找不到合适的解决方案。
仅供参考 。 我建议不要在sizeForItemAt indexPath
设置CollectionCell Size,请尝试一些通用方法。
您应该扩展UICollectionViewFlowLayout
并像这样创建新的Layout,
class HomeLayout: UICollectionViewFlowLayout {
var numberOfItemsPerRow : Int {
get{
var value = 0
if UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiom.phone {
value = 3
} else {
value = 5
}
return value
}
set {
self.invalidateLayout()
}
}
override func prepare() {
super.prepare()
if self.collectionView != nil {
var newItemSize = self.itemSize
let itemsPerRow = max(self.numberOfItemsPerRow, 1)
let totalSpacing = self.minimumInteritemSpacing * CGFloat(itemsPerRow - 1)
let newWidth = (self.collectionView!.bounds.size.width - self.sectionInset.left - self.sectionInset.right - totalSpacing) / CGFloat(itemsPerRow)
newItemSize.width = max(newItemSize.width,newWidth)
if self.itemSize.height > 0 {
let aspectRatio: CGFloat = self.itemSize.width / self.itemSize.height
newItemSize.height = newItemSize.width / aspectRatio
}
self.itemSize = newItemSize
}
}
}
现在,从“接口”构建器将CollectionView的 UICollectionViewFlowLayout
分配给HomeLayout
。
在Storyboard
调整您的sectionInsets
和Min Spacing
。
仅供参考。 相应地在HomeLayout
设置numberOfItemsPerRow
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.