ios – 更新UITableViewCell子视图的帧无效

前端之家收集整理的这篇文章主要介绍了ios – 更新UITableViewCell子视图的帧无效前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个自定义(子类)UITableViewCell,它包含一些UILabel,一个UIButton和一个NSBlock作为属性.该子类称为ExploreCell.其中两个属性是UILabel,分别命名为waitLabel和lastUpdateLabel.

当lastUpdateLabel的内容为nil或is为空白即@“”时,我需要将waitLabel垂直向下移动(在Y轴上)10个像素.我通过检查NSDictionary中的一些对象来执行此操作,如下面的代码中所示,我已将其放在-tableView:cellForRowAtIndexPath:方法中.

CGRect frame = cell.waitLabel.frame;

if ([[venue allKeys] containsObject:@"wait_times"] && ([[venue objectForKey:@"wait_times"] count] > 0)) {

    frame.origin.y = 43;

}

else {
    frame.origin.y = 53;
}

[cell.waitLabel setFrame:frame];

但是,此代码间歇性地工作,并且尝试调用-setNeedsLayout仍然无法正常工作.通过间歇性地,我的意思是在滚动几次后,一个或两个匹配条件的单元格将单元格的原点向下移动10个像素,实际上它们的waitLabel框架已经改变了.

请问您能告诉我为什么会这样,以及如何解决这个问题.

解决方法

这看起来像是自动布局的问题.如果你没有明确地将其关闭,那么它就开启了.您应该在单元格的顶部(或底部)创建约束出口,并在代码中更改该约束的常量,而不是设置框架.根据WWDC 2012视频,如果您使用自动布局,则代码中不应包含任何setFrame:消息.
原文链接:https://www.f2er.com/iOS/328873.html

猜你在找的iOS相关文章