亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何設置單元格間距和UICollectionView-UICollectionViewFlow

如何設置單元格間距和UICollectionView-UICollectionViewFlow

拉丁的傳說 2019-12-09 11:22:41
我正在嘗試添加UICollectionView到ViewController,我需要“每行”有3個單元格,單元格之間沒有空格(它看起來應該像網格)。單元格的寬度應該是屏幕尺寸的三分之一,所以我認為layout.item寬度應該相同。但是然后我得到這個:layout.itemSize width = screenSize.width / 3如果我減小該尺寸(例如減少7或8像素),效果會更好,但是行中的第三個單元格不是完全可見的,并且我仍然有該空白(頂部和底部以及左側和右側)。在此處輸入圖片說明class ViewController: UIViewController, UICollectionViewDelegateFlowLayout, UICollectionViewDataSource {    var collectionView: UICollectionView?    var screenSize: CGRect!    var screenWidth: CGFloat!    var screenHeight: CGFloat!    override func viewDidLoad() {        super.viewDidLoad()        screenSize = UIScreen.mainScreen().bounds        screenWidth = screenSize.width        screenHeight = screenSize.height        // Do any additional setup after loading the view, typically from a nib        let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()        layout.sectionInset = UIEdgeInsets(top: 20, left: 0, bottom: 10, right: 0)        layout.itemSize = CGSize(width: screenWidth / 3, height: screenWidth / 3)        collectionView = UICollectionView(frame: self.view.frame, collectionViewLayout: layout)        collectionView!.dataSource = self        collectionView!.delegate = self        collectionView!.registerClass(CollectionViewCell.self, forCellWithReuseIdentifier: "CollectionViewCell")        collectionView!.backgroundColor = UIColor.greenColor()        self.view.addSubview(collectionView!)    }    func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {        return 1    }
查看完整描述

3 回答

?
揚帆大魚

TA貢獻1799條經驗 獲得超9個贊

添加這2行


layout.minimumInteritemSpacing = 0

layout.minimumLineSpacing = 0

所以你有了:


   // Do any additional setup after loading the view, typically from a nib.

        let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()

        layout.sectionInset = UIEdgeInsets(top: 20, left: 0, bottom: 10, right: 0)

        layout.itemSize = CGSize(width: screenWidth/3, height: screenWidth/3)

        layout.minimumInteritemSpacing = 0

        layout.minimumLineSpacing = 0

        collectionView!.collectionViewLayout = layout

這將刪除所有空格并為您提供網格布局:


在此處輸入圖片說明


如果希望第一列的寬度等于屏幕寬度,請添加以下功能:


func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {

    if indexPath.row == 0

    {

        return CGSize(width: screenWidth, height: screenWidth/3)

    }

    return CGSize(width: screenWidth/3, height: screenWidth/3);


}

網格布局現在看起來像(我還在第一個單元格中添加了藍色背景)


查看完整回答
反對 回復 2019-12-09
?
哆啦的時光機

TA貢獻1779條經驗 獲得超6個贊

對于Swift 3和XCode 8來說,這可行。請按照以下步驟來實現:


{

    let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()

    let width = UIScreen.main.bounds.width

    layout.sectionInset = UIEdgeInsets(top: 0, left: 5, bottom: 0, right: 5)

    layout.itemSize = CGSize(width: width / 2, height: width / 2)

    layout.minimumInteritemSpacing = 0

    layout.minimumLineSpacing = 0

    collectionView!.collectionViewLayout = layout

}

將此代碼放入viewDidLoad()函數。


查看完整回答
反對 回復 2019-12-09
?
肥皂起泡泡

TA貢獻1829條經驗 獲得超6個贊

在某些情況下,設置UICollectionViewFlowLayoutin viewDidLoad或ViewWillAppear不影響collectionView。


設置UICollectionViewFlowLayoutin viewDidAppear可能會導致在運行時看到像元大小的變化。


Swift 3中的另一個解決方案:


extension YourViewController : UICollectionViewDelegateFlowLayout{


    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {

        return UIEdgeInsets(top: 20, left: 0, bottom: 10, right: 0)

    }


    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

        let collectionViewWidth = collectionView.bounds.width

        return CGSize(width: collectionViewWidth/3, height: collectionViewWidth/3)

    }


    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {

        return 0

    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {

        return 20

    }

}


查看完整回答
反對 回復 2019-12-09
  • 3 回答
  • 0 關注
  • 528 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號