View Debug 中的 Collection View Frame 与代码不同
Posted
技术标签:
【中文标题】View Debug 中的 Collection View Frame 与代码不同【英文标题】:Collection View Frame in View Debug is different from code 【发布时间】:2018-06-14 09:28:16 【问题描述】:当通过 View Debug 调试自定义 UICollectionView 时,它的宽度是 829
,但是当通过代码访问它的宽度时,它的宽度是 820
。我错过了什么?
可视化调试:
代码:
func collectionView(_ collectionView: UICollectionView, layout: UICollectionViewLayout, sizeForItemAt: IndexPath) -> CGSize
let widthForCulculation = self.frame.size.width // 820.0
...
return CGSize(width: segmentWidth, height: segmentHeight)
【问题讨论】:
检查单元格之间的空格看这里***.com/a/35656724/9315978 您应该使用collectionView.bounds.size.width
而不是self.frame.size.width
。
@vacawama :边界和框架之间的唯一区别是原点,框架的值是相对于/相对于 parentView 计算的,而在边界的情况下,它总是相对于自身计算。因此边界原点始终为 0,0。但无论你使用哪一个,高度和宽度总是相同的。所以在这种情况下,使用 frame 或 bounds 不会有任何区别。让我知道我是否错了
@SandeepBhandari,如果 1)您正在查看同一对象的 bound
s 和 frame
,则为真,2)对象未旋转(如果旋转,框架变宽,但边界不会改变)。但是,在这种情况下,self
指的是 viewController 的 view
,collectionView
是它的子视图之一,因此总是期望它们具有相同的大小是不合理的。
@vacawama self.frame.size.width 和 collectionView.bounds.size.width 是一样的
【参考方案1】:
相当老套的方式,但在布局子视图时尝试使布局无效
var width : CGFloat = 0
override func layoutSubviews()
super.layoutSubviews()
if (self.width != self.frame.size.width)
self.width = self.frame.size.width
self.collectionViewLayout.invalidateLayout()
【讨论】:
以上是关于View Debug 中的 Collection View Frame 与代码不同的主要内容,如果未能解决你的问题,请参考以下文章
从 Collection View Xcode 中删除 Collection View Cell
如何在 iOS Swift 中显示库中的实时照片视频并在 Collection-View 中显示?
Collection View Xib Cell Bug 中的表视图
滚动 UICollectionView 会导致父 UIView 中的 UITableView 将 Collection View 推出 Frame