IOS UiTableView Cells如何使其高度可调

时间:2016-11-27 19:08:07

标签: ios swift uitableview uistoryboard

我正在使用TableView并拥有一个TableViewCell这是我第一次成功创建一个。我通过Json获取数据并填充TableView;我的问题是所有的TableView单元都有相同的高度,因为我回来的数据大小不一,导致一些看起来不好的表单元格。例如,如果下面的第一个单元格中有更多数据显示或收缩,如果它的数据少于下面的第二个单元格,那么如何查看下面的图像以便如何使TableView单元格扩展,这样就没有#39 ;显示了很多白色空间。

enter image description here

这是StoryBoard的外观,有时可能包含大量数据的元素是下面显示的发布按钮标签。我基本上尝试做两件事:如果Post-Data很长,则展开TableViewCell;如果Post-data很小,则使TableViewCell变小。

enter image description here

我可以访问所有元素

    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
    }

}

2 个答案:

答案 0 :(得分:3)

第1步: 应用如图所示的约束,

enter image description here

下图中显示的约束的文本表示是:)

垂直约束: 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