Swift - UICollectionReusableView的子视图不适合宽度

时间:2017-11-30 14:52:35

标签: ios swift uicollectionview constraints

我有一个带有UICollectionReusableView(标头)的UICollectionViewController。 在这个UICollectionReusableView中,我有一个子视图(粉红色)。

enter image description here

我已经设置了一些约束来提供子视图,全屏宽度。

它完美适用于背景img(黑色)。但是,关于子视图,它只适用于iPhone 6尺寸(对于iPhone 5来说它太大了,而对于iPhone 6 plus来说还不够)。我真的不知道为什么它为背景图像而不是为这个子视图工作。粉红色的子视图是" Radius View on Top"并且背景中的图像是" Ban img"。

我试图在UICollectionReusableView的awakeFromNib()

中对此进行编码
let width = UIScreen.main.bounds.size.width
self.widthConstraintRadiusView.constant = width

修改

我找到了一些东西:

enter image description here

我可以看到子视图的宽度正确,但它没有拉伸?这怎么可能?我有什么需要了解的?

enter image description here

编辑2

如果我在子视图中使用roundCorners函数,它将无效:

func roundCorners(_ corners:UIRectCorner, radius: CGFloat) {
      let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
      let mask = CAShapeLayer()
      mask.path = path.cgPath
      self.layer.mask = mask
   }

radiusViewOnTop.roundCorners([.topLeft,.topRight], radius: 7)

我如何保持功能并具有正确的宽度?

1 个答案:

答案 0 :(得分:1)

使用您的最新编辑,我知道它为什么不起作用,这是一个简单的修复。

您的视图尺寸正确,但您添加的蒙版尺寸错误。

您使用iPhone 6尺寸设计了界面,这些是视图加载的尺寸。之后,它会对您的视图执行布局传递,以将大小更新为实际大小。

但是,您可能正在调用awakeFromNib上的圆角方法或类似的方法,这种方法在加载视图之后但在更新大小之前发生。

修复很简单,覆盖layoutSubviews,先调用super,然后调用roundCorners:方法。