我的自定义UITableViewCell
背景为UIView
,顶部有UITextView
。
UIView
用于将背景颜色设置为白色,带圆角以显示角落中单元格的contentView.backgroundColor
(红色)。
当用户输入文字时,UITextView
高度会正确展开。
UIView
(在屏幕截图中突出显示)对所有4个边都有约束,与UITableViewCell一起成长。这工作正常(见屏幕截图,我也检查了帧高)。
问题是白色UIView.backgroundColor
未展开,因此“展开”部分是透明的,让红色contentView.backgroundColor
显示。
我试图在setNeedsLayout
和/或UIView
中UITableViewCell
拨打UITextViewDelegate textViewDidChange
,但这并没有解决问题。
此外,在tableView:cellForRowAtIndexPath:
或tableView:willDisplayCell:forRowAtIndexPath
中设置背景颜色并没有什么区别。
这似乎与此SO post类似。
如何在整个更新的展开框架上绘制UIView backgroundColor
,而不仅仅是原始框架?
更新2018-06-20:
以下是我要做的圆角(来自this SO post)
// from http://stackoverflow.com/questions/4847163/round-two-corners-in-uiview/14485362
- (void)setMaskTo:(id)sender byRoundingCorners:(UIRectCorner)corners withCornerRadii:(CGSize)radii {
// UIButton requires this
[sender layer].cornerRadius = 0.0;
UIBezierPath *shapePath = [UIBezierPath bezierPathWithRoundedRect:[sender bounds]
byRoundingCorners:corners
cornerRadii:radii];
CAShapeLayer *newCornerLayer = [CAShapeLayer layer];
newCornerLayer.frame = [sender bounds];
newCornerLayer.path = shapePath.CGPath;
[sender layer].mask = newCornerLayer;
}
然后,在tableView:cellForRowAtIndexPath:
我用
[self setMaskTo:textInputCell.bgColorView byRoundingCorners:(UIRectCornerTopLeft | UIRectCornerTopRight) withCornerRadii:CORNER_RADII];
答案 0 :(得分:1)
如评论中所述,如果您的目标是iOS 11+,则可以使用CACornerMask
(layer.maskedCorners
),它允许您指定要四舍五入的特定角。
如果您需要支持iOS 10或更早版本,可以将UIBezierPath
代码放入layoutSubviews()
中-这样,您可以在视图框架发生更改时随时更新其框架。