【发布时间】:2016-07-01 10:41:41
【问题描述】:
请告诉我如何制作网格视图,例如纵向每列 2 个单元格和横向每列 3 个单元格。在不使用 pod 或第三方框架的情况下使用集合视图自定义单元格。
提前致谢。
【问题讨论】:
请告诉我如何制作网格视图,例如纵向每列 2 个单元格和横向每列 3 个单元格。在不使用 pod 或第三方框架的情况下使用集合视图自定义单元格。
提前致谢。
【问题讨论】:
你需要这样做
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协议
【讨论】:
我已经回答了类似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 个单元格。希望这会有所帮助。
【讨论】: