滚动时,UITableViewCell detailTextLabel消失

我使用了一个string数组,我detailTextLabel设置了detailTextLabel 。 最初所有的字幕设置正确,但如果我滚动detailTextLabel消失。

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"personCell" forIndexPath:indexPath]; Person *person = [_persons objectAtIndex:indexPath.row]; cell.textLabel.text = person.name; cell.detailTextLabel.text = person.phone; // also tried setNeedsLayout but does not help [cell setNeedsLayout]; return cell; } 

我正在使用iPhone 6和iOS 8.我也使用故事板,并将UITableViewCell样式设置为Subtitle

好的,现在我们已经发现问题了(用这个人的电话号码),你可以用几种方法解决这个问题。

看来你不想把文本设置为空白。 我想这是因为它把单元格放在了一个奇怪的方式,把标题推到顶部,但没有在底部。 可以理解的。

所以,你可以创build一个自定义的UITableViewCell子类。 在这里你可以自己pipe理这个布局,如果这个数字是零的,就可以按照一种方式来布局,如果有一个电话号码,那么就可以采用不同的方式。

更简单的方法是使用两个不同的原型单元。

在故事板上创build两个原型单元格。

一个types为Basic并给它一个reuseIdentifier noPhoneNumberCell 。 另一种是Subtitletypes和重用标识符phoneNumberCell

然后在代码中,你可以做这样的事情…

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { Person *person = [_persons objectAtIndex:indexPath.row]; UITableViewCell *cell; if (person.phone) { cell = [tableView dequeueReusableCellWithIdentifier:@"phoneNumberCell" forIndexPath:indexPath]; cell.detailTextLabel.text = person.phone; } else { cell = [tableView dequeueReusableCellWithIdentifier:@"noPhoneNumberCell" forIndexPath:indexPath]; } cell.textLabel.text = person.name; return cell; } 

这现在将创build两个单元队列。 一个用于电话号码的人,一个用于没有电话号码的人。

这样你就不会混淆两者,所以要避免你面临的问题。

 [cell.detailTextLabel sizeToFit]; 
 UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:@"cell"]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"cell"]; }