按代码

时间:2017-08-21 07:28:05

标签: ios swift xcode storyboard

我已经通过代码创建了我的视图但是有两个UICollectionViews。所以在Storyboard中创建它们并需要通过代码找到它们。 我就这样做了:

        TopProducts = UICollectionView(frame: CGRect(x: 8, y: scrollViewHeight + 166, width: viewWidth - 8, height: 120))
    contentScrollView.addSubview(TopProducts)

应用程序崩溃,此错误显示在控制台中:

  

*由于未捕获的异常终止应用程序' NSInvalidArgumentException',原因:' UICollectionView必须使用非零布局参数初始化'   * 第一次抛出调用堆栈:   (       0 CoreFoundation 0x000000010271526b exceptionPreprocess + 171       1 libobjc.A.dylib 0x000000010160af41 objc_exception_throw + 48       2 CoreFoundation 0x0000000102789ba5 + [NSException raise:format:] + 197       3 UIKit 0x0000000105d14a39 - [UICollectionView initWithFrame:collectionViewLayout:] + 81       4 UIKit 0x0000000105d149e2 - [UICollectionView initWithFrame:] + 58       5 JahanCo目录0x0000000100747bfd _T0So16UICollectionViewCABSC6CGRectV5frame_tcfcTO + 77       6 JahanCo目录0x0000000100744f24 _T0So16UICollectionViewCABSC6CGRectV5frame_tcfC + 100       7 JahanCo目录0x00000001007446f0 _T015JahanCo_Catalog9SlideViewC11viewDidLoadyyF + 9936       8 JahanCo目录0x0000000100744fa4 _T015JahanCo_Catalog9SlideViewC11viewDidLoadyyFTo + 36       9 UIKit 0x000000010542fd93 - [UIViewController loadViewIfRequired] + 1235       10 UIKit 0x0000000105476cd4 - [UINavigationController _updateScrollViewFromViewController:toViewController:] + 68       11 UIKit 0x0000000105477010 - [UINavigationController _startTransition:fromViewController:toViewController:] + 153       12 UIKit 0x0000000105478127 - [UINavigationController _startDeferredTransitionIfNeeded:] + 841       13 UIKit 0x0000000105479388 - [UINavigationController __viewWillLayoutSubviews] + 115       14 UIKit 0x00000001056c26d9 - [UILayoutContainerView layoutSubviews] + 231       15 UIKit 0x000000010536321e - [UIView(CALayerDelegate)layoutSublayersOfLayer:] + 1331       16 QuartzCore 0x0000000103375c92 - [CALayer layoutSublayers] + 153       17 QuartzCore 0x0000000103379d79 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 401       18 QuartzCore 0x0000000103302851 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 385       19 QuartzCore 0x000000010332e1c2 _ZN2CA11Transaction6commitEv + 500       20 UIKit 0x00000001052b11de __34- [UIApplication _firstCommitBlock] _block_invoke_2 + 141       21 CoreFoundation 0x00000001026b82ac __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK + 12       22 CoreFoundation 0x000000010269cadb __CFRunLoopDoBlocks + 203       23 CoreFoundation 0x000000010269c2b4 __CFRunLoopRun + 1300       24 CoreFoundation 0x000000010269bb29 CFRunLoopRunSpecific + 409       25 GraphicsServices 0x000000010aa059c6 GSEventRunModal + 62       26 UIKit 0x00000001052959a4 UIApplicationMain + 159       27 JahanCo目录0x0000000100754ed7 main + 55       28 libdyld.dylib 0x000000010750f621 start + 1       29 ??? 0x0000000000000001 0x0 + 1   )   libc ++ abi.dylib:以NSException类型的未捕获异常终止   (lldb)

2 个答案:

答案 0 :(得分:2)

这是一个小代码片段

import Foundation
import UIKit

class ViewController: UIViewController,UICollectionViewDelegate,UICollectionViewDataSource {
    override func viewDidLoad() {
        super.viewDidLoad()

        let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
        layout.sectionInset = UIEdgeInsets(top: 20, left: 10, bottom: 10, right: 10)
        layout.itemSize = CGSize(width: 90, height: 120)
        let collectionView = UICollectionView(frame: self.view.frame, collectionViewLayout: layout)
        collectionView.dataSource = self
        collectionView.delegate = self
        collectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: "Cell")
        collectionView.backgroundColor = UIColor.blue
        self.view.addSubview(collectionView)
    }

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return 10
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath)
        cell.backgroundColor = UIColor.red
        return cell
    } 
}

答案 1 :(得分:1)

以下是以编程方式创建 CollectionView 的方法

class GridViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout, UICollectionViewDelegate {

override func viewDidLoad() {
    super.viewDidLoad()

    let flowLayout = UICollectionViewFlowLayout()
    //to set the scroll direction
    flowLayout.scrollDirection = .horizontal

    let collectionView = UICollectionView(frame: self.view.bounds, collectionViewLayout: flowLayout)
    collectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: "collectionCell")
    collectionView.delegate = self
    collectionView.dataSource = self
    collectionView.backgroundColor = UIColor.cyan

    self.view.addSubview(collectionView)
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
{
    return 20
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
{
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "collectionCell", for: indexPath as IndexPath)

    cell.backgroundColor = UIColor.green
    return cell
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
{
    return CGSize(width: 50, height: 50)
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets
{
    return UIEdgeInsets(top: 5, left: 5, bottom: 5, right: 5)
}

}