请让我知道如何制作网格视图,如每列2个单元格用于纵向,3个单元格用于横向。使用集合视图自定义单元格而不使用pod或第三方框架。
提前致谢。
答案 0 :(得分:1)
你需要这样做
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
let collectionViewSize = collectionView.frame.size.width
if(UIDeviceOrientationIsLandscape(UIDevice.currentDevice().orientation))
{
return CGSizeMake(collectionViewSize/3, collectionViewSize/3)
}
else if(UIDeviceOrientationIsPortrait(UIDevice.currentDevice().orientation))
{
return CGSizeMake(collectionViewSize/2, collectionViewSize/2)
}
return CGSizeZero
}
您还需要重新加载方向更改
NSNotificationCenter.defaultCenter().addObserver(self, selector: "rotated", name: UIDeviceOrientationDidChangeNotification, object: nil)
func rotated()
{
collectionView.reloadData()
}
注意:确保您确认UICollectionViewDelegateFlowLayout
协议
答案 1 :(得分:1)
我已经回答了类似here这样的问题。我甚至解释了如何更改视图以符合您的要求。在你的情况下,它可能看起来像这样。
let orientation = UIApplication.sharedApplication().statusBarOrientation
if(orientation == .LandscapeLeft || orientation == .LandscapeRight)
{
return CGSizeMake((yourCollectionView.frame.size.width-10)/3, (yourCollectionView.frame.size.height-10)/3)
}
else{
return CGSizeMake((yourCollectionView.frame.size.width-5)/2, (yourCollectionView.frame.size.height-5)/2)
}
扣除是单元格填充(在我的情况下为5)。如果3个细胞,那么2个细胞填充总共10个扣除和2个细胞,那么1个细胞填充总共5个扣除。希望这会有所帮助。