一些背景: 我正在用UITableView构建一个应用程序,该应用程序显示用户可以使用UITableViewCell的子类投票的投票列表。 UITableViewCell子类有5个IBOutlet UILabels:一个问题标签,然后是4个选择标签。投票可能有2,3或4个选项,所以我可能不会显示第3个和/或第4个选择标签。每个标签都将“行数”设置为0,这样如果它们太长,他们会将文本包装起来。UITableViewCell在第一次加载时不能正确呈现
我已成立,以保证细胞布局约束具有动态的高度,每本教程:http://www.raywenderlich.com/87975/dynamic-table-view-cell-height-ios-8-swift
问题标签上有内容拥抱优先级为250,而所有的选择标签在251 问题标签内容压缩阻力优先级为751,而所有的选择标签都在752.
当我第一次加载应用程序时,第一次调查的问题有太多的垂直填充,第一个选择得到的截断与省略号。 但是,当我向下滚动然后向后滚动时,它会自行修复:问题标签拥抱它的内容,第一个选项显示其所有内容。
这里有一个GIF我做了显示问题(集中在顶电池):
这里的接口生成器(如果它帮助)的截图:
下面是我用来填充单元格标签的代码:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
PollTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kPollCellReuseId];
Poll *poll = [self.polls objectAtIndex: indexPath.row];
cell.questionLabel.text = poll.question;
cell.choiceLabel1.text = [(Choice *)[poll.choices objectAtIndex:0] text];
cell.choiceLabel2.text = [(Choice *)[poll.choices objectAtIndex:1] text];
BOOL hasChoice3 = poll.choices.count > 2;
cell.choiceLabel3.text = hasChoice3 ? [(Choice *)[poll.choices objectAtIndex:2] text] : @"";
cell.choiceLabel3TopConstraint.constant = hasChoice3 ? 8 : 0;
BOOL hasChoice4 = poll.choices.count > 3;
cell.choiceLabel4.text = hasChoice4 ? [(Choice *)[poll.choices objectAtIndex:3] text] : @"";
cell.choiceLabel4TopConstraint.constant = hasChoice4 ? 8 : 0;
return cell;
}
为什么在第一次尝试时不能正确渲染?
会发生什么,如果你在上面的代码中返回单元之前调用'[cell layoutIfNeeded]'? – sikhapol
这似乎解决了它,但现在它正在抱怨表中的第二个单元格的自动布局:它不喜欢第三个和第四个选择标签之间的垂直间距 –
我减少了第三个和第四个选择标签之间的垂直间距约束的优先级第四选择标签,现在一切似乎都很好。我是否以正确的方式去解决这个问题?这一切似乎有点哈克我想要完成。 –