【发布时间】:2018-11-28 06:55:04
【问题描述】:
我有一个自定义UITableViewCell,背景是UIView,顶部是UITextView。
UIView 用于将背景颜色设置为白色,圆角边缘显示单元格的contentView.backgroundColor(红色)在角落。
当用户输入文本时,UITextView 高度正确扩展。
UIView(在屏幕截图中突出显示)在所有 4 个方面都有约束,以便与 UITableViewCell 一起增长。这可以正常工作(见截图,我还检查了框架高度)。
问题是白色的UIView.backgroundColor没有展开,所以“展开”的部分是透明的,让红色的contentView.backgroundColor显示出来。
我尝试在UIView 和/或UITextViewDelegate textViewDidChange 中的UITableViewCell 上调用setNeedsLayout,但这并没有解决问题。
另外,在tableView:cellForRowAtIndexPath: 或tableView:willDisplayCell:forRowAtIndexPath 中设置背景颜色并没有什么区别。
这似乎和这个SO post类似。
我怎样才能让UIView backgroundColor 绘制在整个更新、扩展的框架上,而不仅仅是原始框架?
2018 年 6 月 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];
【问题讨论】:
-
您需要在更改框架的同时动态更改约束。
-
您能进一步解释一下吗?目前,我没有在代码中明确更改框架。
-
@thomers - 你是如何“圆角”你的白色 UIView 的?你在设置它的
layer.cornerRadius吗?还是你在设置图层路径? -
@DonMag 我正在设置图层路径 - 请参阅我的更新。我是否正确假设问题是我只设置了一次路径,而不是更新它?如果是这样,我应该在哪里/如何更新它?或者摆脱 UIBezierPath 并完全做其他事情? (请注意,我想定义要舍入的特定角)
-
(重新访问关于圆角特定角的引用 SO 答案,我发现我可以使用 iOS 11 的 CACornerMask 而不是设置 bezierPathWithRoundedRect)
标签: ios uitableview uiview uiviewcontroller autolayout