自定义高度未应用于UITableView原型单元

时间:2018-01-02 11:59:38

标签: ios swift xcode uitableview tableview

我正在构建一个表视图场景,我已经为原型单元定义了一个自定义高度。我为自定义单元格创建了一个文件,并通过该文件中的IBOutlets添加了一个图像和两个标签。我已连接表视图,表正在调用信息,但高度未应用。这是我的单元格类和cellForRow方法的语法。

TableView文章对象:

import Foundation
import UIKit

class FeedItem {

    var feedItemTitle: String
    var feedItemImage: UIImage
    var feedItemExcerpt: String = "Lorem ipsum dolor amet flexitarian art party skateboard, ethical pop-up drinking vinegar readymade humblebrag hot chicken. Retro kogi quinoa..."
    var feedItemLike: UIImage
    var feedItemComment: UIImage

    init(feedItemTitle: String, feedItemImage: UIImage, feedItemLike: UIImage, feedItemComment: UIImage) {
        self.feedItemTitle = feedItemTitle
        self.feedItemImage = feedItemImage
        self.feedItemLike = feedItemLike
        self.feedItemComment = feedItemComment
    }

}

TableView Cell:

import UIKit

class FeedTableViewCell: UITableViewCell {

    @IBOutlet weak var articleImageView: UIImageView!
    @IBOutlet weak var articleTitleLabel: UILabel!
    @IBOutlet weak var articleExcerptLabel: UILabel!

}

TableView扩展:

extension NewFeedViewController: UITableViewDelegate, UITableViewDataSource {

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return articlesArray.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Article Cell", for: indexPath) as! FeedTableViewCell
        cell.articleImageView.image = articlesArray[indexPath.row].feedItemImage
        cell.articleTitleLabel.text = articlesArray[indexPath.row].feedItemTitle
        cell.articleExcerptLabel.text = articlesArray[indexPath.row].feedItemExcerpt
        return cell
    }

}

以下是应用程序运行时表视图的截图:

enter image description here

以下是Xcode中Prototype单元格和Size Inspector的屏幕截图:

enter image description here

5 个答案:

答案 0 :(得分:3)

使用此属性

self.table.estimatedRowHeight = 44.0 
self.table.rowHeight = UITableViewAutomaticDimension

甚至你也可以使用代表

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
    return 44
}

答案 1 :(得分:2)

您必须在委托方法中明确指定行高。像这样:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
{
    return 100.0;//Choose your custom row height
}

答案 2 :(得分:1)

viewDidLoad()中使用  tableView.rowHeight = 400

希望它有所帮助!

答案 3 :(得分:1)

1-在viewDidLoad

中使用动态tableView
 tableView.estimatedRowHeight = 400;

 tableView.rowHeight = UITableViewAutomaticDimension;

2-不实现hightforCellAtIndexpath

3-从上到下在单元格xib中正确调整约束

关于collectionview,imageView和reply部分初始给出它们所有的高度约束为零,然后将每个on的高度约束挂钩为IBOulet,并根据 cellForRowAtIndexpath 更改它的常量值。当前项通过更改约束的相应常量值来管理隐藏/显示

返回单元格之前

5-执行此操作

 cell.layoutSubviews()

 cell.layoutIfNeeded()

 return cell

因此可以传递单元格以反映其子视图约束的变化

答案 4 :(得分:0)

Delegate heightForRowAt - {/ p>使用UITableView方法

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
    {
        return 130.0;
}