UITableViewCell 的自动布局子视图的框架不会更新



我正在尝试向自定义UITableViewCell的子视图添加阴影。子视图用作单元格的可见背景(单元格的根视图是清晰的)。

该单元使用xib在界面构建器中进行布局。子视图使用对单元的4条边的自动布局约束进行布局。

对于不同宽度的设备,子视图本身似乎可以自动恢复。从堆栈溢出的研究中,我发现我必须将依赖于帧的代码放在layoutSubviews方法中。我把我的阴影绘制代码放在那里:

layer.shadowPath = [[UIBezierPath bezierPathWithRoundedRect:subView.bounds cornerRadius:3.0]CGPath];

阴影会出现,但仅限于调整大小之前的框架大小,经过一些调试后,它似乎是视图框架矩形,这是界面生成器中的一个可修改常量(对于自动布局视图控制器,它实际上是灰色的:@)。

从进一步的调试来看,子视图框架似乎永远不会更新,即使单元视图框架是。(这是通过在布局子视图中打印视图框架的宽度来执行的)

 layoutSubviewscalled, parent view frame size: 180 subview frame size: 148.000000
 layoutSubviewscalled, parent view frame size: 375 subview frame size: 148.000000

这是个虫子吗?我是不是错过了什么?我该怎么谴责这件事?

如此答案所示,在插入UIBezierPath作为shadowPath之前,您应该调用[self-setNeedsLayout]。

最新更新