I have a custom UITableViewCell with an UIView in the background, and a UITextView on top.
The UIView is used to set the background color to white, with rounded edges to reveal the cell's contentView.backgroundColor (red) in the corners.
The UITextView height expands correctly when the user enters text.
The UIView (highlighted in the screenshot) has constraints on all 4 sides to grow together with the UITableViewCell. This works correctly (see screenshot, I also checked the frame height).
The problem is that the white UIView.backgroundColor is not expanded, so the "expanded" part is transparent, letting the red contentView.backgroundColor show.
I have tried to call setNeedsLayout on the UIView and/or the UITableViewCell in UITextViewDelegate textViewDidChange, but this did not solve the issue.
Also, setting the background colors in tableView:cellForRowAtIndexPath: or tableView:willDisplayCell:forRowAtIndexPath does not make a difference.
This seems to be similar to this SO post.
How can I have the UIView backgroundColor draw on the whole updated, expanded frame, and not just the original frame?
Update 2018-06-20:
Here is what I'm doing to get the rounded corners (from 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;
}
Then, in tableView:cellForRowAtIndexPath: I call it with
[self setMaskTo:textInputCell.bgColorView byRoundingCorners:(UIRectCornerTopLeft | UIRectCornerTopRight) withCornerRadii:CORNER_RADII];
