如何使用集合视图单元格swift ios实现网格视图

时间:2016-07-01 10:41:42

标签: ios iphone swift ios9

请让我知道如何制作网格视图,如每列2个单元格用于纵向,3个单元格用于横向。使用集合视图自定义单元格而不使用pod或第三方框架。

提前致谢。

2 个答案:

答案 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个扣除。希望这会有所帮助。