我使用了一组字符串来设置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
。
答案 0 :(得分:4)
好的,既然我们已经发现了问题(这个人的电话号码为零),你可以通过几种方式解决问题。
您似乎不希望将文本设置为空白。我想这是因为它以奇怪的方式布置了单元格,标题被推到顶部,但没有任何东西在它下面。可以理解的。
因此,您可以创建自定义UITableViewCell
子类。在它里面你可以自己管理布局,如果数字是零,那就用一种方式排列,如果它有一个电话号码,则用不同的方式排列。
更简单的方法是使用两个不同的原型单元。
在故事板中创建两个原型单元格。
一个类型Basic
,并为其提供reuseIdentifier noPhoneNumberCell
。
另一个类型为Subtitle
,重用标识符为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;
}
现在将创建两个单元格队列。一个用于有电话号码的人,另一个用于没有电话号码的人。
这样你就不会混淆两者,所以避免你遇到的问题。
答案 1 :(得分:2)
[cell.detailTextLabel sizeToFit];