Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 以编程方式声明的UICollectionView不会更改Swift 5中单元格的大小_Ios_Swift_Uicollectionview_Uicollectionviewcell_Uicollectionviewlayout - Fatal编程技术网

Ios 以编程方式声明的UICollectionView不会更改Swift 5中单元格的大小

Ios 以编程方式声明的UICollectionView不会更改Swift 5中单元格的大小,ios,swift,uicollectionview,uicollectionviewcell,uicollectionviewlayout,Ios,Swift,Uicollectionview,Uicollectionviewcell,Uicollectionviewlayout,我以编程方式声明一个UICollectionView及其对应的单元格。在编写了一般设置之后,我发现我无法配置单元格的大小。无论我放置的是逻辑还是什么维度,单元格(红色)看起来都是一些默认的正方形(小)。屏幕截图在这篇文章的末尾 以下代码供参考: setupView(){} // collection view for screens let screenHeight : CGFloat = CGFloat(height/6) let screenWidth = scree

我以编程方式声明一个
UICollectionView
及其对应的单元格。在编写了一般设置之后,我发现我无法配置单元格的大小。无论我放置的是逻辑还是什么维度,单元格(红色)看起来都是一些默认的正方形(小)。屏幕截图在这篇文章的末尾

以下代码供参考:

setupView(){}
    // collection view for screens
    let screenHeight : CGFloat = CGFloat(height/6)
    let screenWidth = screenHeight * ( width/height )
    let offset_top_screens : CGFloat = height - rowHeight - screenHeight

    let screenRow = UICollectionView(
          frame: CGRect(x: 0, y: offset_top_screens, width: width, height: screenHeight)
        , collectionViewLayout: UICollectionViewFlowLayout()
    )

    //screenRow.translatesAutoresizingMaskIntoConstraints = false

    screenRow.backgroundColor = Color.grayTertiary

    // set up collection view delegates
    screenRow.dataSource = self
    screenRow.alwaysBounceHorizontal = true

    screenRow.register(ScreenItem.self, forCellWithReuseIdentifier: ScreenItem.identifier) // register w/ storyboard

    self.view.addSubview(screenRow)
    self.screenRow = screenRow
    self.view.bringSubviewToFront(screenRow)
    self.screenHeight = screenHeight
    self.screenWidth  = screenWidth
    // end collection view screen

}


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

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let row = indexPath.row
    let user = self.dataSource[row]
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ScreenItem", for: indexPath) as! ScreenItem

    /*
     cell.uuid        = user.uuid
     cell.delegate    = self
     cell.mediaSource = ... what is the pipe here?
     */
    return cell
}


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

    return CGSize(width: 45, height:40)  // changing these values do not change anything
    // return CGSize(width: 90, height: collectionView.bounds.height)   <- this does nothing


}


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

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 0
}



// somewhere in a different file


/*
 @Use: display user's screen
 */
class ScreenItem: UICollectionViewCell {

    static var identifier: String = "ScreenItem"

    weak var textLabel: UILabel!

    override init(frame: CGRect) {
        super.init(frame: frame)
        self.backgroundColor = Color.red
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    override func prepareForReuse() {
        super.prepareForReuse()
        self.reset()
    }

    func reset() {
        // @TOOD: reset things here
    }
}

您似乎没有设置委托。如果您使用的是
UICollectionViewFlowLayout
,则您的
UIViewController
应实现
UICollectionViewDelegateFlowLayout
协议


您的
UIViewController
实例是否已实现此协议?您是否设置了委托属性?

您似乎没有设置委托。如果您使用的是
UICollectionViewFlowLayout
,则您的
UIViewController
应实现
UICollectionViewDelegateFlowLayout
协议


您的
UIViewController
实例是否已实现此协议?您是否设置了
委托
属性?

我实现了UICollectionViewDataSource和UICollectionViewDelegate.ok是的,得到了。我意外删除了collectionview.delegate=self位。但是现在集合视图可以垂直和水平滚动。。。这里禁用垂直滚动的设置是什么?我实现了UICollectionViewDataSource和UICollectionViewDelegate。好的,知道了。我意外删除了collectionview.delegate=self位。但是现在集合视图可以垂直和水平滚动。。。这里禁用垂直滚动的设置是什么?
class CallController:
  UIViewController
, UICollectionViewDataSource
, UICollectionViewDelegate