如何在collectionViewCell中使用动态大小的scrollView

Posted

技术标签:

【中文标题】如何在collectionViewCell中使用动态大小的scrollView【英文标题】:How can I use scrollView inside collectionViewCell with dynamic size 【发布时间】:2020-07-04 10:59:33 【问题描述】:

我想创建这个页面。我在 viewController 中创建了一个 collectionView。但是我怎样才能使这个动态的高度,我认为我需要创建一个滚动视图?如何更改集合视图大小而不是加载的 json 数据?而这个页面的结构应该如何?

我以编程方式创建了集合视图,但我现在没有任何数据。但是当我创建集合视图时,我必须给出高度值。我必须在加载 json 数据时设置框架详细信息。请帮助这个主题..至少请注意..谢谢大家

编辑:

我在单元格内添加了滚动视图,但现在无法在单元格之间切换。在红色区域(单元格)工作切换但不能在 containerView 上工作..

Scroll View problem

class NewsDetailController: UIViewController 

private lazy var collectionView: UICollectionView = 
    let frame = CGRect(x: 0, y: 100, width: view.frame.width, height: 800)
    let layout = UICollectionViewFlowLayout()
    layout.scrollDirection = .horizontal
    
    let cv = UICollectionView(frame: frame, collectionViewLayout: layout)
    cv.isPagingEnabled = true
    cv.delegate = self
    cv.dataSource = self
    cv.showsHorizontalScrollIndicator = false
    cv.register(NewsDetailCell.self, forCellWithReuseIdentifier: reuseIdentifier)
    return cv
()

// MARK: - Lifecycle

override func viewDidLoad() 
    super.viewDidLoad()
    configureUI()
    

// MARK: - Helpers

func configureUI() 

    view.addSubview(collectionView)
    view.backgroundColor = .white
    
    view.addSubview(stackBottomButtons)
    stackBottomButtons.anchor(left: view.leftAnchor,bottom: view.bottomAnchor,right: view.rightAnchor,paddingLeft: 16,paddingBottom: 32,paddingRight: 16, height: 60)
    backButton.widthAnchor.constraint(equalToConstant: 100).isActive = true
    shareButton.widthAnchor.constraint(equalToConstant: 100).isActive = true
    


 

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath) as! NewsDetailCell

    return cell




extension NewsDetailController: UICollectionViewDelegateFlowLayout 


func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize 
    return CGSize(width: view.frame.width, height: 800)



class NewsDetailCell: UICollectionViewCell 

// MARK: - Properties

let contentLabel: UILabel = 
    let label = UILabel(frame: CGRect.zero)
    label.numberOfLines = 0
    return label
()

// MARK: - Lifecycle

override init(frame: CGRect) 
    super.init(frame: frame)
    configure()
    configureUI()


func configure() 
    contentLabel.text = articleViewModel?.article.content


func configureUI() 

    addSubview(contentLabel)
    contentLabel.anchor(top: stack.bottomAnchor,left: leftAnchor,right: rightAnchor)




I want to make this page.

Full Code

【问题讨论】:

【参考方案1】:

I think you are looking for something like this

要使帧大小动态化,您需要通过单元格内的属性组合高度来设置单元格大小,这可以在您使用此链接创建的 customCell 文件中完成

【讨论】:

虚拟谢谢你的回答。这对我很有帮助。我在单元格内创建了滚动视图。以及滚动视图内的容器视图。但是现在无法在单元格之间切换..

以上是关于如何在collectionViewCell中使用动态大小的scrollView的主要内容,如果未能解决你的问题,请参考以下文章

当用户滑动并点击手指(使用触摸手势)时如何隐藏所有 CollectionViewCell?

如何在外侧 UIButton Click 上获取 CollectionViewCell indexPath

使用 PagedView 时如何将 CollectionViewCell 的边缘固定到 CollectionView

如何访问嵌入在主UIViewController中的父collectionViewCell中的collectionView?

如何将imageView添加到collectionViewCell中的scrollView

如何在单元格大小更改后自动调整 CollectionViewCell 中的内容大小?