我正在使用TableView并拥有一个TableViewCell这是我第一次成功创建一个。我通过Json获取数据并填充TableView;我的问题是所有的TableView单元都有相同的高度,因为我回来的数据大小不一,导致一些看起来不好的表单元格。例如,如果下面的第一个单元格中有更多数据显示或收缩,如果它的数据少于下面的第二个单元格,那么如何查看下面的图像以便如何使TableView单元格扩展,这样就没有#39 ;显示了很多白色空间。
这是StoryBoard的外观,有时可能包含大量数据的元素是下面显示的发布按钮标签。我基本上尝试做两件事:如果Post-Data很长,则展开TableViewCell;如果Post-data很小,则使TableViewCell变小。
我可以访问所有元素
class HomePageTVC: UITableViewCell {
@IBOutlet weak var profile_id: UILabel!
@IBOutlet weak var comment: UIButton!
@IBOutlet weak var vote: UIButton!
@IBOutlet weak var time: UILabel!
@IBOutlet weak var post: UIButton!
@IBOutlet weak var fullname: UIButton!
@IBOutlet weak var location: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
profile_id.isHidden = true
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// post.isUserInteractionEnabled = true
// Configure the view for the selected state
}
}
答案 0 :(得分:3)
第1步: 应用如图所示的约束,
下图中显示的约束的文本表示是:)
垂直约束: V:| - [8] - [全名] - [8] - [时间] - [8] - [文字查看] - [8] - |
任何组件都没有高度限制。 在应用这些约束时,xCode会建议您将内容压缩阻力优先级修改为 749 执行此操作!
第2步:取消选中textView可滚动属性
第3步:将行数设置为0
第4步:在你的tableView控制器的ViewDidLoad()中写
self.tableView.rowHeight = UITableViewAutomaticDimension
self.tableView.estimatedRowHeight = 100
第5步:不要写 heightForRowAtIndexPath 委托:)
多数民众赞成:)
希望有所帮助
答案 1 :(得分:1)
除了Sandeep的答案之外,你应该在显示之前计算单元格高度,以防止一些滞后的滚动体验。
@interface SomeTableViewController ()
@property (strong, nonatomic) NSMutableDictionary *cellHeightsDictionary;
@end
@implementation SomeTableViewController
- (NSMutableDictionary *)cellHeightsDictionary { //setter
if (!_cellHeightsDictionary) {
_cellHeightsDictionary = [[NSMutableDictionary alloc]init];
}
return _cellHeightsDictionary;
}
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
NSIndexPath *key = indexPath;
NSNumber *height = @(cell.frame.size.height);
//store the pre-calculated cell height and index path to the dictionary
[self.cellHeightsDictionary setObject:height forKey:key];
}
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
NSNumber *height = [self.cellHeightsDictionary objectForKey:indexPath];
if (height) { //load the height from dictionary for this index path
return height.floatValue;
}
return UITableViewAutomaticDimension;
}
@end