我的UITableView顶部不需要的空白UITableViewCell

时间:2011-08-10 23:41:36

标签: objective-c ios uitableview

我有一个UITableView,它顶部有一个空白行,我无法弄清楚原因。以下是相关代码,您是否知道这里发生了什么?

UITableView加载时没有内容。此方法是在以下情况下开始每次数据刷新的方法:

- (IBAction)updateButton:(id)sender 
{
    if (questionsTextField.isFirstResponder) {
        [questionsTextField resignFirstResponder];
        [self assignQuestionsCount];
    }

    if (currentNumberOfQuestions > 0) {
        // do work calculating
        currentTest = nil;

        currentTest = [self retrieveCurrentTest];
        currentTest.numberOfQuestions = currentNumberOfQuestions;
        currentTest.decimalPlacesToDisplay = 0;
        currentTest.roundingBreakPoint = 0.5;

        currentGradeScale = nil;
        currentGradeScale = [currentTest generateGradingScale];
        [scoresTableView reloadData];
    }
    else {
        // my error handling on text boxes here....
    }
}

这是我对UITableView方法的实现:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [self.currentGradeScale count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"scoresIndentifier";
    static int missedTag = 1, correctTag = 2, gradeTag = 3;

    UILabel *missedLabel, *correctAndTotalLabel, *letterGradeLabel;

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    //if a cell does not exist, get it then initialize it
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];

        // populate data
        missedLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, 100, 50)];
        missedLabel.tag = missedTag;
        missedLabel.font = [UIFont systemFontOfSize:14.0];
        missedLabel.textAlignment = UITextAlignmentCenter;
        missedLabel.textColor = [UIColor blackColor];
        missedLabel.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleHeight |UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth;
        [cell.contentView addSubview:missedLabel];

    }
    // if it does, just reassign the properties
    else {
        missedLabel = (UILabel *)[cell.contentView viewWithTag:missedTag];
    }

    missedLabel.text = [[self.currentGradeScale objectAtIndex:indexPath.row] determineLetterGrade:0.5];

    return cell;
}

感谢帮助人员,我真的很感激。

2 个答案:

答案 0 :(得分:1)

您可能已经考虑过的最明显的解释是表格的第一行已经设置了空白数据(即self.currentGradeScale objectAtIndex:0返回nil或@“”表示“确定的字母等级0.5”。 )

如果你在调试器中的cellForRowAtIndexPath上为你为标签文本赋值的那一行设置一个断点,那么它肯定会为第0行设置一个非空/非空值吗?

另请注意,missLabel上存在内存泄漏 - 将其作为子视图添加到单元格将保留它,因此您应该在alloc上自动释放,或者在添加为子视图后释放。

答案 1 :(得分:1)

我遇到了同样的问题,发现Scroll View Size / Content Insets / Top区域中有一个值。见附图。一旦我将其设置为0并保存,顶部的空白区域就会消失。我希望这有帮助。

enter image description here