自定义单元格的UIView框架未在cellForRowAtIndexPath中更新

时间:2014-04-25 03:46:29

标签: ios objective-c uitableview

我有一个带有UIView的自定义单元格,我正在尝试更新cellForRowAtIndexPath中的框架。对于在第一行传递中加载的行,所有帧都已成功更新。但是,需要滚动才能看到的行在将它们滚动到视图中之前不会更新其视图框架,将它们滚动到视图之外,然后将它们滚动回视图。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    RoundCell *cell = (RoundCell *)[tableView dequeueReusableCellWithIdentifier:@"RoundCell"];

    CGRect frame = CGRectMake(160, 10, 50, 22);
    cell.rightConfidenceBar.frame = frame;
}

对于最初未加载的行,为什么我需要将它们滚动到视图中,在视图之外,然后在更新UIView帧之前返回视图?

2 个答案:

答案 0 :(得分:2)

在做了一些挖掘并找到这些问题之后:

question 1question 2question 3

我意识到这是自动布局的问题。这个问题的两个解决方案是:

1.通过取消选中其中一个答案中提到的方框(不推荐)来关闭自动布局

2.做什么问题1而不是更新视图的框架,更新宽度约束常数,如此

for (NSLayoutConstraint *constraint in cell.rightConfidenceBar.constraints)
    {
        if (constraint.firstAttribute == NSLayoutAttributeWidth)
            constraint.constant = 50;
    }

警告:如果取消选中自动布局,您可能会失去在整个项目中所做的所有限制。

答案 1 :(得分:0)

之后

RoundCell *cell = (RoundCell *)[tableView dequeueReusableCellWithIdentifier:@"RoundCell"];

尝试添加

if (cell == nil)
    cell = [[RoundCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"RoundCell"];