【问题标题】:A UIView isn't placed right on top of a collection view cell when inserted to the view controller view's hierarchy插入视图控制器视图的层次结构时,UIView 不会放在集合视图单元格的顶部
【发布时间】:2018-06-17 13:23:01
【问题描述】:

我有一个水平集合视图,其中单元格不覆盖整个屏幕。我想将UIView 插入到视图控制器的层次结构中,并将其放在所选单元格的正上方。

为此,我需要所选单元格的框架。为了得到它,我在 didSelectItem 方法中尝试了以下内容:

1)

let frame = collectionViewLayout.layoutAttributesForItem(at: indexPath)?.frame

2)

 let selectedCell = collectionView.cellForItem(at: indexPath)

在这两种情况下,我得到相同的结果,这是正确的。为了将UIView 插入层次结构,我使用以下代码:

    self.view.insertSubview(mimicView, aboveSubview: collectionView)
    mimicView.frame = frame

    print ("mimicView frame:", mimicView.frame)

打印语句打印正确的框架(它与所选单元格的之一相同)。但是,mimicView 位置在绘制时并不完全位于单元格的顶部。对于第一个单元格,viewy 有一个小的负值。对于随后的单元格,view 被越来越向左绘制。因此,例如,对于第二个单元格,view 几乎绘制在第三个单元格的顶部。而对于第三个,它几乎绘制在第五个之上。在Interface Debugger 中,我看到它的x 值太大而y 值是一个小的负数(如-20 - -40 点),但是,打印语句仍然显示与选定的单元格。

如果有人知道为什么会发生这种情况,我将非常感谢您的帮助。

【问题讨论】:

    标签: ios swift uiview uicollectionview


    【解决方案1】:

    确保将单元格的bounds 转换为视图的坐标系(要向其添加新子视图的视图),并将生成的矩形用作覆盖视图的frame

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        guard let cell = collectionView.cellForItem(at: indexPath) else { return }
        let cellFrame = cell.convert(cell.bounds, to: view)
    
        let coverView = UIView(frame: cellFrame)
        coverView.backgroundColor = .darkGray
        view.addSubview(coverView)
    }
    

    【讨论】:

    • 我知道我错过了一些简单的东西。感谢您的帮助,它有效!
    猜你喜欢
    • 2012-10-16
    • 1970-01-01
    • 2016-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    相关资源
    最近更新 更多