滚动时,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
。 另一种是Subtitle
types和重用标识符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"]; }