2012-07-31 64 views
0

在我的自定义表视图单元格子类中,其中一个文本标签的位置取决于ivar(NSString)的内容。 (即:如果NSString是空字符串,则文本标签的框架位置不同)。UITableViewCell自定义子类视图未更新

如果更新如下位置:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    customOverlayCell *myCell = [self.tableView dequeueReusableCellWithIdentifier:@"CustomOverlayCell"]; 

    if ([buildingFName isEqual:@""]) 
    { 
     CGRect titleLabelFrame = myCell.titleLabel.frame; 
     titleLabelFrame.origin.y = 45; 
     [myCell.titleLabel setFrame:titleLabelFrame]; 
    } 

    return myCell; 
} 

我已删除那些不相关的部分代码。

结果是出现在屏幕上的第一个单元格的布局得到了正确更新,但滚动后出现的视图布局未更新。

我没有正确使用dequeueReusableCellWithIdentifier吗?或者是其他的错误?

编辑:从EJV

解决方案:

CGRect titleLabelFrame = myCell.titleLabel.frame; 

if ([buildingFName isEqual:@""]) 
{ 
    titleLabelFrame.origin.y = 45; 
} else { 
    titleLabelFrame.origin.y = 37; 
} 

[myCell.titleLabel setFrame:titleLabelFrame]; 

回答

1

如果标题标签的框架是动态的,那么当你出列从表视图的单元格,框架可以在任一两个状态(当buildingFName为空并且有字符时)。您需要确保您在buildingFName不为空时设置框架。这样,标题标签的框架将始终正确设置。所以,你需要这样的代码:

CGRect titleLabelFrame = myCell.titleLabel.frame; 

if ([buildingFName isEqual:@""]) 
{ 
    titleLabelFrame.origin.y = 45; 
} else { 
    // Change titleLabelFrame 
} 

[myCell.titleLabel setFrame:titleLabelFrame]; 
+1

像魅力一样工作。我的节目非常糟糕。谢谢。 – ratsimihah 2012-07-31 22:13:51

+0

@HeryR。没问题。 – EJV 2012-07-31 22:24:14

1

我很害怕,它需要继承的单元格,执行[UITableViewCell的layoutSubviews]适当布置您的细胞子视图。这是我如何做一个开关表视图细胞类似的东西:

- (void)layoutSubviews 
{ 
    CGFloat const ESCFieldPadding = 10.0f; 

    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationBeginsFromCurrentState:YES]; 

    // call super layout 
    [super layoutSubviews]; 

    // obtain widths of elements 
    CGFloat contentWidth = self.contentView.frame.size.width; 
    CGFloat contentHeight = self.contentView.frame.size.height; 
    CGFloat switchWidth = self.switchView.frame.size.width; 
    CGFloat switchHeight = self.switchView.frame.size.height; 
    CGFloat labelWidth = contentWidth - (4 * ESCFieldPadding) - switchWidth; 

    // correctly position both views 
    self.textLabel.frame = CGRectMake(ESCFieldPadding, 0.0f, 
             labelWidth, contentHeight); 
    // it is needed to explicitly resize font as for some strange reason, 
    // uikit will upsize the font after relayout 
    self.textLabel.font = [UIFont boldSystemFontOfSize:[UIFont labelFontSize]]; 

    CGRect switchFrame = self.switchView.frame; 
    switchFrame.origin = CGPointMake(contentWidth - ESCFieldPadding - switchWidth, 
            (contentHeight/2) - (switchHeight/2)); 
    self.switchView.frame = CGRectIntegral(switchFrame); 

    [UIView commitAnimations]; 
} 
+0

我试图把我的布局修改中禁用自动布局 - (空)layoutSubviews,但它并没有改变任何东西。幸运的是,EJV找到了答案。感谢您的帮助! – ratsimihah 2012-07-31 22:13:00

0

尝试从细胞

+0

谢谢,但是这个问题在一年前似乎已经解决了! – ratsimihah 2014-03-27 14:19:59

相关问题