Swift - UICollectionReusableView 的子视图不适合宽度
Posted
技术标签:
【中文标题】Swift - UICollectionReusableView 的子视图不适合宽度【英文标题】:Swift - subview of UICollectionReusableView doesn't fit with width 【发布时间】:2017-11-30 14:52:34 【问题描述】:我有一个带有 UICollectionReusableView(标题)的 UICollectionViewController。 在这个 UICollectionReusableView 中,我有一个子视图(粉红色)。
我已经为子视图设置了一些约束,即全屏宽度。
它非常适合背景 img(黑色)。但是,关于子视图,它仅适用于 iPhone 6 尺寸(例如,对于 iPhone 5s 来说太大,对于 iPhone 6 plus 来说不够)。我真的不知道为什么它适用于背景图像而不适用于这个子视图。粉红色的子视图是“Radius View on Top”,背景中的图像是“Ban img”。
我尝试在 UICollectionReusableView 的 awakeFromNib() 中对此进行编码
let width = UIScreen.main.bounds.size.width
self.widthConstraintRadiusView.constant = width
编辑
我发现了一些东西:
我可以看到子视图有正确的宽度,但它没有被拉伸?这怎么可能?我必须了解什么?
编辑 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)
我怎样才能保持功能并具有正确的宽度?
【问题讨论】:
页眉视图的其余部分大小是否正确? 我是这么认为的,因为正如我所说,“Ban img”的尺寸非常合适 我建议使用层次结构检查器来查看为什么大小会这样。 仅供参考,问题的屏幕截图通常比问题的屏幕截图更有帮助。 有点混乱...您的粉红色“顶部半径视图”具有前导和尾随约束...您设置的“宽度约束常数”是什么? 【参考方案1】:根据您的最新编辑,我知道它为什么不起作用,并且这是一个简单的修复。
您的视图尺寸正确,但您添加的蒙版尺寸错误。
您使用 iPhone 6 尺寸设计了界面,这些是加载视图的尺寸。之后,它会在您的视图上执行布局传递,以将大小更新为实际大小。
但是,您可能在 awakeFromNib
或类似的东西上调用圆角方法,这发生在视图加载之后但大小更新之前。
修复很简单,覆盖layoutSubviews
,先调用super
,再调用roundCorners:
方法。
【讨论】:
当我将函数调用到 layoutSubviews 时它不起作用,但如果我将函数调用到 viewForSupplementaryElementOfKind() 中它会起作用 ...以上是关于Swift - UICollectionReusableView 的子视图不适合宽度的主要内容,如果未能解决你的问题,请参考以下文章