【问题标题】:errors with UICollectionViewFlowLayout scrollingUICollectionViewFlowLayout 滚动错误
【发布时间】:2021-03-01 11:26:16
【问题描述】:

我正在设置一个 UiCollectionView 并试图让视图水平滚动。视图已设置,我可以看到标签和图像,但它根本不滚动。 collectionViewCell 本身的高度是 350,我如何设置单元格是

let SubView: UIView = {
     let view = UIView()
     view.backgroundColor = GREEN_Theme
     view.layer.cornerRadius = 10
     return view
 }()
 
 let headerLabel: UILabel = {
     let label = UILabel()
     label.text = "label"
     label.font = UIFont.systemFont(ofSize: 30)
     label.font = .boldSystemFont(ofSize: 30)
     label.numberOfLines = 0
     label.textColor = UIColor.black
     return label
 }()


 override init(frame: CGRect) {
     super.init(frame: frame)
    setupViews()

   addSubview(SubView)
     SubView.anchors(top: topAnchor, topPad: 0, bottom: nil, bottomPad: 0, left: leftAnchor, leftPad: 0, right: rightAnchor, rightPad: 0, height: 1, width: self.bounds.width - 20)
    
   addSubview(headerLabel)
   headerLabel.anchors(top: SubView.bottomAnchor, topPad: 5 , bottom: nil, bottomPad: 0, left: safeAreaLayoutGuide.leftAnchor, leftPad: 15, right: nil, rightPad: 0, height: 50, width: 200)


  
 }

 required init?(coder aDecoder: NSCoder) {
     fatalError("init(coder:) has not been implemented")
 }

let recentCollectionView: UICollectionView = {
    let layout = UICollectionViewFlowLayout()
    layout.scrollDirection = .horizontal
    let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
    collectionView.backgroundColor = UIColor.clear
    collectionView.translatesAutoresizingMaskIntoConstraints = false
    
    
    return collectionView
}()

func setupViews() {
    
    backgroundColor = UIColor.clear
    
    addSubview(recentCollectionView)
    contentView.isUserInteractionEnabled = true
    recentCollectionView.dataSource = self
    recentCollectionView.delegate = self
    recentCollectionView.isUserInteractionEnabled = true
    recentCollectionView.backgroundColor = UIColor.blue
    recentCollectionView.register(recentCell.self, forCellWithReuseIdentifier: cellID)
    recentCollectionView.layer.zPosition = 1
    recentCollectionView.topAnchor.constraint(equalTo: topAnchor, constant: 40).isActive = true
    recentCollectionView.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 5).isActive = true
    recentCollectionView.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -5).isActive = true
    recentCollectionView.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -40).isActive = true
    
 
}

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

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellID, for: indexPath) as! recentCell
    cell.configureCell(reviews[indexPath.row])
    
    return cell
}

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


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

}


 class recentCell: UICollectionViewCell {

override init(frame: CGRect) {
      super.init(frame: frame)
    setupViews()
    
  }
    
let imageView: UIImageView = {
    let iv = UIImageView()
    iv.image = UIImage(named: "rake")
    iv.contentMode = .scaleAspectFill
    iv.layer.cornerRadius = 16
    iv.layer.masksToBounds = true
    return iv
}()

let nameLabel: UILabel = {
    let label = UILabel()
    label.text = "Zach Wilcox"
    label.font = UIFont.systemFont(ofSize: 14)
    label.numberOfLines = 2
    return label
}()

let categoryLabel: UILabel = {
    let label = UILabel()
    label.text = "Yard Work"
    label.font = UIFont.systemFont(ofSize: 13)
    label.textColor = UIColor.darkGray
    return label
}()

let starControls = starStackView()
     
 required init?(coder aDecoder: NSCoder) {
     fatalError("init(coder:) has not been implemented")
 }


func setupViews() {
    
    addSubview(imageView)
    addSubview(nameLabel)
    addSubview(categoryLabel)
    addSubview(starControls)
    
    starControls.translatesAutoresizingMaskIntoConstraints = false
    starControls.distribution = .fillEqually
    
    imageView.frame = CGRect(x:0, y: 0, width: frame.width, height: frame.width)
    nameLabel.anchors(top: imageView.bottomAnchor, topPad: 1, bottom: nil, bottomPad: 0, left: imageView.leftAnchor, leftPad: 0, right: nil, rightPad: 0, height: 20, width: 100)
    categoryLabel.anchors(top: nameLabel.bottomAnchor, topPad: 1, bottom: nil, bottomPad: 0, left: imageView.leftAnchor, leftPad: 0, right: nil, rightPad: 0, height: 20, width: 100)
    starControls.anchors(top: categoryLabel.bottomAnchor, topPad: 1, bottom: nil, bottomPad: 0, left: imageView.leftAnchor, leftPad: 0, right: nil, rightPad: 0, height: 20, width: 100)
      }

在我的控制台中,我看到了

项目高度必须小于 UICollectionView 的高度减去部分插入顶部和底部值,减去内容插入顶部和底部值。

我尝试在recentCollectionView 和collectionView 本身中将背景颜色设置为蓝色,以查看单元格的高度是否超过collectionView 的高度,但不是。

以下图片,

第一张图片,是整个contentView的大小。

而这张图片就是recentCollectionView的大小

从图片中我们可以看到,recentCollectionView 不大于 collectionView。为什么我会看到这个错误,为什么我的 collectionViewFlowLayout 不会滚动?

【问题讨论】:

    标签: ios swift uicollectionview uicollectionviewcell uicollectionviewflowlayout


    【解决方案1】:

    我在发布我的问题后不久就找到了答案,但不想删除以防万一其他新手遇到同样的问题。我所要做的就是将 recentCollectionView 添加到 contentView 的子视图中,而不仅仅是 addSubview。

    contentView.addSubview(recentCollectionView)
    

    超级简单的修复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-07
      • 2018-05-05
      • 1970-01-01
      相关资源
      最近更新 更多