单元格在 UICollectionView 中随着水平滚动而消失

赫拉克利斯

我已经被这个奇怪的问题困住了一段时间,似乎无法弄清楚。

设置

  • 一个UICollectionView
  • s为A的UICollectionViewCell小号
  • UICollectionView当用户在 B 中点击时,C添加为 B 的子视图

    +------------------------------+
    |A                             |
    |                              |
    | +----------+    +----------+ |
    | |B         |    |B         | |
    | |----------|    |          | |
    | |          |    |          | |
    | |C         |    |          | |
    | +----------+    +----------+ |
    +------------------------------+
    

问题

当初始化C'SUICollectionViewFlowLayout滚动方向属性.horizontal和滚动经过所述第二小区,C的细胞消失。

作为奖励,C 本身正在从 UI 中消失:用户再次能够进入单元格,该单元格执行对 C 的通常删除所做的所有操作。当再次点击以正常重新显示它时,会触发在 C 的显示上触发的操作,但在视觉上仍然找不到 C。

滚动方向设置为 时不会发生此问题.vertical

有没有人遇到过类似的问题或任何关于这里发生了什么的线索?

提前致谢。


EDIT实际执行

(二)

import UIKit

class CollectionViewCell: UICollectionViewCell {

    //...

    private let cellId = "cellId"

    private lazy var label: UILabel = {

        return CollectionViewCell._label()
    }()

    fileprivate lazy var gallery: UICollectionView = {

        return CollectionViewCell._gallery()
    }()

    //...

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

        isOpaque = true
        clipsToBounds = true
        layer.borderWidth = 1.5
        layer.cornerRadius = 8

        // ...
    }

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

    private func onSwitchDisplayGallery(_ isDiplaying: Bool) {

        switch isDiplaying {

        case true:

            addSubview(label)
            label.topAnchor.constraint(equalTo: topAnchor).isActive = true
            label.leftAnchor.constraint(equalTo: leftAnchor).isActive = true
            label.widthAnchor.constraint(equalTo: widthAnchor).isActive = true
            label.heightAnchor.constraint(equalToConstant: frame.height / 5.25).isActive = true

            gallery.register(NestedCollectionViewCell.self, forCellWithReuseIdentifier: cellId)
            gallery.delegate = self
            addSubview(gallery)
            gallery.topAnchor.constraint(equalTo: label.bottomAnchor).isActive = true
            gallery.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true
            gallery.widthAnchor.constraint(equalTo: widthAnchor).isActive = true
            gallery.heightAnchor.constraint(equalTo: heightAnchor, constant: -frame.height / 5.25).isActive = true

        case false:

            print("removed cv")
            // ...
        }
    }

    //...
}

extension CollectionViewCell: UICollectionViewDelegateFlowLayout {

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

        return gallery.frame.size
    }
}


private extension CollectionViewCell {

    class func _gallery() -> UICollectionView {

        let layout = UICollectionViewFlowLayout()

        layout.minimumInteritemSpacing = 0
        layout.minimumLineSpacing = 0
        layout.scrollDirection = .horizontal

        let cv = UICollectionView(frame: .zero, collectionViewLayout: layout)

        cv.isPagingEnabled = true
        cv.showsHorizontalScrollIndicator = false
        cv.translatesAutoresizingMaskIntoConstraints = false
        return cv
    }

    class func _label() -> UILabel {

        let label = UILabel()

        label.font = UIFont(name: "Montserrat-Regular", size: 15)
        label.textColor = .white
        label.translatesAutoresizingMaskIntoConstraints = false
        return label
    }
}

(C)

import UIKit

class NestedCollectionViewCell: UICollectionViewCell {

    private let containerView = NestedCollectionViewCell._containerView()

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

        isOpaque = true
        clipsToBounds = true
        backgroundColor = .white

        addSubview(containerView)
        containerView.centerXAnchor.constraint(equalTo: centerXAnchor).isActive = true
        containerView.centerYAnchor.constraint(equalTo: centerYAnchor).isActive = true
        containerView.widthAnchor.constraint(equalTo: widthAnchor).isActive = true
        containerView.heightAnchor.constraint(equalTo: heightAnchor).isActive = true

        //...
    }

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

private extension NestedCollectionViewCell {

    class func _containerView() -> UIImageView {

        let view = UIImageView()

        view.contentMode = .scaleAspectFill
        view.translatesAutoresizingMaskIntoConstraints = false
        return view
    }
}

编辑 2在这里试过尼克的回答

当滚动方向设置为 时.vertical,一切正常。

当它设置为.horizontalC 时不显示单元格...

赫拉克利斯

愚蠢的,愚蠢的菜鸟错误。如果其他人像我一样需要眼镜,请将其留在这里:)

集合视图没有水平约束...

addSubview(gallery)
gallery.topAnchor.constraint(equalTo: label.bottomAnchor).isActive = true
gallery.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true

将此更正为

addSubview(gallery)
gallery.topAnchor.constraint(equalTo: label.bottomAnchor).isActive = true
gallery.leftAnchor.constraint(equalTo: leftAnchor).isActive = true

修复它(显然)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

UIScrollView 单元格内的 UICollectionView 消失

来自分类常见问题

UICollectionView中的单元格左对齐

来自分类常见问题

UICollectionView中的单元格间距

来自分类Dev

Swift中UICollectionView的单元格registerClass

来自分类Dev

UICollectionView部分中的单元格数

来自分类Dev

UICollectionView中的方形单元格布局

来自分类Dev

UICollectionView 中的单元格重叠

来自分类Dev

UICollectionview 单元格中的下拉列表

来自分类Dev

每个 UICollectionView 单元格中的 UITableView

来自分类Dev

在UICollectionView中水平(水平)对齐单元格

来自分类Dev

展开/压缩 UICollectionView 中的所有 UICollectionView 单元格

来自分类Dev

单元格中的UIVisualEffectView减慢了UICollectionView的滚动

来自分类Dev

在UICollectionView中滚动选择错误单元格-Swift

来自分类Dev

UICollectionView,单元格选择不起作用,单元格滚动良好

来自分类Dev

UICollectionView,单元格选择不起作用,单元格滚动良好

来自分类Dev

以编程方式创建的UICollectionView:滚动后单元格重叠

来自分类Dev

UICollectionview加载单元格时滚动不稳定

来自分类Dev

强制UICollectionView滚动直到特定单元格居中

来自分类Dev

UICollectionView单元格覆盖了滚动指示器

来自分类Dev

UICollectionView和选定的单元格在滚动时丢失选择

来自分类Dev

以编程方式创建的UICollectionView:滚动后单元格重叠

来自分类Dev

uicollectionview滚动更改单元格索引路径

来自分类Dev

UICollectionView滚动后显示错误的单元格顺序

来自分类Dev

设置单元格数据后,如何更新UICollectionView中单元格的大小?

来自分类Dev

窥视与弹出-弹出导致UICollectionView中的单元格错误

来自分类Dev

在UICollectionView中,单元格不会位于底部

来自分类Dev

在单元格之间的UICollectionView中设置/覆盖填充

来自分类Dev

获取对UIcollectionview中的某些单元格的引用

来自分类Dev

UICollectionView单元格中的UIActivityIndicator不会随机隐藏

Related 相关文章

  1. 1

    UIScrollView 单元格内的 UICollectionView 消失

  2. 2

    UICollectionView中的单元格左对齐

  3. 3

    UICollectionView中的单元格间距

  4. 4

    Swift中UICollectionView的单元格registerClass

  5. 5

    UICollectionView部分中的单元格数

  6. 6

    UICollectionView中的方形单元格布局

  7. 7

    UICollectionView 中的单元格重叠

  8. 8

    UICollectionview 单元格中的下拉列表

  9. 9

    每个 UICollectionView 单元格中的 UITableView

  10. 10

    在UICollectionView中水平(水平)对齐单元格

  11. 11

    展开/压缩 UICollectionView 中的所有 UICollectionView 单元格

  12. 12

    单元格中的UIVisualEffectView减慢了UICollectionView的滚动

  13. 13

    在UICollectionView中滚动选择错误单元格-Swift

  14. 14

    UICollectionView,单元格选择不起作用,单元格滚动良好

  15. 15

    UICollectionView,单元格选择不起作用,单元格滚动良好

  16. 16

    以编程方式创建的UICollectionView:滚动后单元格重叠

  17. 17

    UICollectionview加载单元格时滚动不稳定

  18. 18

    强制UICollectionView滚动直到特定单元格居中

  19. 19

    UICollectionView单元格覆盖了滚动指示器

  20. 20

    UICollectionView和选定的单元格在滚动时丢失选择

  21. 21

    以编程方式创建的UICollectionView:滚动后单元格重叠

  22. 22

    uicollectionview滚动更改单元格索引路径

  23. 23

    UICollectionView滚动后显示错误的单元格顺序

  24. 24

    设置单元格数据后,如何更新UICollectionView中单元格的大小?

  25. 25

    窥视与弹出-弹出导致UICollectionView中的单元格错误

  26. 26

    在UICollectionView中,单元格不会位于底部

  27. 27

    在单元格之间的UICollectionView中设置/覆盖填充

  28. 28

    获取对UIcollectionview中的某些单元格的引用

  29. 29

    UICollectionView单元格中的UIActivityIndicator不会随机隐藏

热门标签

归档