即使我已经解决了这个问题,我仍然想问这个问题的原因和/或解决方案。因为将来很有可能我需要一种更好的方法。我所拥有的解决方案将发布在帖子的末尾。
问题是,当我调整标签视图(容器)的宽度约束时,将其延长,backgroundColor不会填充整个视图(或更确切地说,视图(容器)正在被切割,但是调试视图层次结构,容器等于imageView的尾随。请参见屏幕截图:
该错误是由使用UIBezierPath
引起的:
/// Round the corner radius with bezier path.
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
}
我习惯使用UIBezierPath
和layer.cornerRadius
自动布局和圆角化。如果我不使用UIBezierPath
,则不会发生该错误。
更多信息是,我通常在setupCell()
期间在称为cellForRow
的单元格中调用一个方法。在这种方法中,我根据数据确定约束值之类的东西。然后更新约束。
我尝试过的事情:
UIBezierPath
内使用drawRect()
来圆角化。UIBezierPath
内使用func layoutSubviews()
来拐角。self.setNeedsDisplay()
。我已实施且有效的当前解决方案:
不要使用UIBezierPath
而不是layer.cornerRadius
,使用它可以绕过所有角落,但是由于视图(容器)位于imageView的底部和尾部,因此我只添加了一个偏移量/ inset以使其超出imageView的底部和尾部,并且imageView的clipsToBounds
设置为true。
所以问题是:为什么会发生这种情况,又有什么其他方法可以解决呢?
该问题的目的是为了将来的情况,例如假设视图(容器)位于单元格的中心,并且topLeft角是唯一要舍入的角? :)
谢谢!