我一直认为这个问题很容易解决,但花了很多时间才解决它。
所以,我有一个带有 UICollectionView 的 UIViewController 。这个系列从顶部填充75像素,并且具有非常简单的设置 - 仅1 UIImageView 设置为适合容器的大小。一切都是通过 AutoLayout 制作的。
我的任务是让 UIImageView 全屏显示。我正在做的是制作一个临时的 UIImageView 并添加到 UIViewController 视图的层次结构中。
我面临的问题是我无法在我点击的单元格中获得 UIImageView 的绝对帧。
我尝试了各种方法来计算框架,我最近的尝试是
var rect = cell.imageView.superview!.convertRect(cell.imageView.frame, toView: self.view)
但是,它返回的结果似乎忽略了集合视图顶部约束。
更新:
事实证明我的问题是以错误的方式从集合视图中获取单元格。而不是:
let cell = collectionView.cellForItemAtIndexPath(indexPath) as! UIImageCollectionViewCell
我正在接收
let cell = self.collectionView(collectionView, cellForItemAtIndexPath: indexPath) as! UIImageCollectionViewCell
这显然导致使用错误的框架创建新单元格。我的坏,深夜编码有时不是最好的。感谢Arun Ammannaya的快速示例
答案 0 :(得分:1)
我试过的,按预期工作。
class ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource {
@IBOutlet var collectionView: UICollectionView!
override func viewDidLoad() {
super.viewDidLoad()
}
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 10
}
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
return collectionView.dequeueReusableCellWithReuseIdentifier("aaa", forIndexPath: indexPath)
}
func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
return 10
}
@IBAction func frame(sender: AnyObject) {
print(String(sender.frame))
let rect = sender.superview??.convertRect(sender.frame, toView: self.view)
print(String(rect))
let addedView = UIView()
view.addSubview(addedView)
addedView.frame = rect!
addedView.backgroundColor = UIColor.yellowColor()
}
}
故事板看起来像:
输出如下: