如何使用动态大小的标签使自定义表格单元格工作?

时间:2014-10-17 22:20:31

标签: ios uitableview swift

我不确定在xCode项目中使用多个文件来显示此问题的最佳方法,所以请原谅我,如果这不是最佳方式 - 请告诉我我还能做些什么显示!

在任何情况下,我都有一个从笔尖(.xib)显示的自定义表视图,并在该自定义表视图中有多个动态高度标签。一切都表现得很好,除了表格单元格高度总体上不适应内部元素增加的高度。

我能看到的是,Table View的行高值被用作绝对值,我不知道如何覆盖它。我将其设置为200,并且每个表都固定,即使内容超出了这个高度:

enter image description here 我使用自动布局,它在单元格元素本身中运行良好......它只是未设置的单元格高度。

这是我在单元格中元素的代码:

class EventTableViewCell: UITableViewCell {

func loadItem (#date:String, title:String, description:String, image:UIImage) {

    dateLabel.text = date
    titleLabel.text = title
    eventImage.image = image
    eventDescription.text = description

    titleLabel.setTranslatesAutoresizingMaskIntoConstraints(false)
    titleLabel.numberOfLines = 0
    self.contentView.addSubview(titleLabel)


    eventDescription.setTranslatesAutoresizingMaskIntoConstraints(false)
    eventDescription.numberOfLines = 0
    self.contentView.addSubview(eventDescription)

}


@IBOutlet weak var eventImage: UIImageView!

@IBOutlet weak var dateLabel: UILabel!

@IBOutlet weak var titleLabel: UILabel!


@IBOutlet weak var eventDescription: UILabel!

override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
}

处理数据的类:

class Contacts: UITableViewController, UITableViewDataSource, UITableViewDelegate {



var eventData:[AnyObject] = []


override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return eventData.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {


    let cell = tableView.dequeueReusableCellWithIdentifier("customCell", forIndexPath: indexPath) as EventTableViewCell

    if (eventData.count != 0) {
        var event: AnyObject? = eventData[indexPath.row]
        if let unwrappedEvent: AnyObject = event {
            let eventTitle = unwrappedEvent["title"] as? String
            let eventDate = unwrappedEvent["date"] as? String
            let eventDescription = unwrappedEvent["description"] as String
            let eventImage = unwrappedEvent["image"] as? UIImage


            if (eventImage != nil){

                cell.loadItem(date: eventDate!, title: eventTitle!, description: eventDescription, image: eventImage!)}


            else {


                let testImage: UIImage = UIImage(named: "test-image.png")

                cell.loadItem(date: eventDate!, title: eventTitle!, description: eventDescription, image: testImage )
            }

        }
    }
    return cell
}

override func viewDidLoad() {
    super.viewDidLoad()


    var nib = UINib(nibName: "CustomTableViewCell", bundle: nil)
    tableView.registerNib(nib, forCellReuseIdentifier: "customCell")

    let manager = AFHTTPRequestOperationManager()

    manager.GET( "http://[my-json-file].json",
        parameters: nil,


        success: {
            (operation: AFHTTPRequestOperation!,responseObject: AnyObject!) in
            println("JSON: " + responseObject.description)
            self.eventData = responseObject!["events"] as [AnyObject]
            self.tableView.reloadData()
        },
        failure: { (operation: AFHTTPRequestOperation!,error: NSError!) in
            println("Error: " + error.localizedDescription)
    })

}

我还不确定此时我还能做些什么才能让单元格高度动态运行。我几乎尝试过所有事情。任何帮助将不胜感激,再次,如果我需要从我的代码中显示其他任何内容,请告诉我。

非常感谢!

1 个答案:

答案 0 :(得分:0)

我注意到在您的Contacts类中,您没有实现tableView(_ tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath)方法。我怀疑如果你这样做,那么代码就可以了。