框架不';UITableViewCell的自动布局子视图的t更新

框架不';UITableViewCell的自动布局子视图的t更新,uitableview,autolayout,xcode6,xib,Uitableview,Autolayout,Xcode6,Xib,我正在尝试向自定义UITableViewCell的子视图添加阴影。子视图用作单元格的可见背景(单元格的根视图是清晰的) 单元在界面生成器中使用xib布局。子视图是使用自动布局约束对单元的4条边进行布局的 对于不同宽度的设备,子视图本身似乎可以自动调整大小。根据堆栈溢出研究,我认为我必须将依赖于帧的代码放在layoutSubviews方法中。我将阴影绘制代码放在那里: layer.shadowPath = [[UIBezierPath bezierPathWithRoundedRect:subVi

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

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

对于不同宽度的设备,子视图本身似乎可以自动调整大小。根据堆栈溢出研究,我认为我必须将依赖于帧的代码放在layoutSubviews方法中。我将阴影绘制代码放在那里:

layer.shadowPath = [[UIBezierPath bezierPathWithRoundedRect:subView.bounds cornerRadius:3.0]CGPath];
阴影将显示,但仅显示为调整其大小之前的边框大小,经过一些调试后,它似乎是图幅矩形,这是界面生成器中的一个可修改常量(对于autolayout视图控制器,它实际上是灰显的:@)

通过进一步调试,子视图框似乎从未更新,即使单元视图框已更新。(这是通过在LayoutSubView中打印视图框的宽度来执行的)


这是虫子吗?我错过什么了吗?我能做些什么来谴责这一点呢?

如图所示,在插入UIBezierPath作为阴影路径之前,您应该调用[self-setNeedsLayout]。

非常感谢您的回复。我以前看过这个答案,但不够耐心。这似乎有效,但仅适用于第三次layoutSubviews调用。你知道如何在视图更新后才能绘制阴影吗?@SameerJJ发现我的自动布局也有问题,在我的情况下,现在我在初始化自定义UIScrollView之前,在我的视图控制器上调用
self.layoutifneed()
(正如Apple文档所述:使用接收消息的视图作为根视图,此方法从根开始布置视图子树。)您尝试
[self-setNeedsLayout]
然后是
[self-layoutifneed]
?是的,我确实尝试过,但失败了。即使布局最终返回正确的帧大小,但总体上还是有很多问题。我真的认为苹果公司需要加快步伐,让AutoLayou的工作更轻松。我已经回到了这个单元的编程视图布局。谢谢你的帮助,我不认为AutoLayou这太可怕了(可能是因为我总是认为我不知道什么时候我遇到问题)。我会让另一个帮助给随机搜索者,虽然不适用于Sameer的问题:确保在
viewdide()上需要
frame
时开始绘制和初始化子视图
而不是
viewDidLoad()
,这样您可以确保所有帧都是正确的。
 layoutSubviewscalled, parent view frame size: 180 subview frame size: 148.000000
 layoutSubviewscalled, parent view frame size: 375 subview frame size: 148.000000