// EventCell.swift import UIKit class EventCell: UITableViewCell { var eventName: UILabel = UILabel() var eventCity: UILabel = UILabel() var eventTime: UILabel = UILabel() override init(style: UITableViewCellStyle, reuseIdentifier: String?) { super.init(style: style, reuseIdentifier: reuseIdentifier) self.contentView.addSubview(eventName) self.contentView.addSubview(eventCity) self.contentView.addSubview(eventTime) } required init(coder aDecoder: NSCoder) { super.init(coder: aDecoder) } override func layoutSubviews() { super.layoutSubviews() eventName = UILabel(frame: CGRectMake(20, 10, UIScreen.mainScreen().bounds.size.width - 40, 25)) eventCity = UILabel(frame: CGRectMake(0, 0, 0, 0)) eventTime = UILabel(frame: CGRectMake(0, 0, 0, 0)) self.contentView.setNeedsLayout() self.contentView.layoutIfNeeded() } } // ViewController.swift import UIKit class ViewController: UITableViewController, UITableViewDelegate { var events: Dictionary = ["1": ["Monroe Family", "La CaƱada", "8:30"]] override func viewDidLoad() { super.viewDidLoad() tableView.registerClass(EventCell.self, forCellReuseIdentifier: "EventCell") } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } override func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { return 60.0; } override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return events.count } override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { var cell: EventCell = tableView.dequeueReusableCellWithIdentifier("EventCell") as EventCell cell.sizeToFit() return cell } }