So I've got a UITableView
loading up many columns of quotes. Upon entering the UITableView
that displays this data, the cells seem to initially not be loading properly and the text looks really squished and/or cut off, after about a 1/2 second, it loads properly and everything works fine.
This occurs every time I load up the table view.
For example:
Is this a problem with the .estimatedrowheight...or is it because the view cannot load the data into the
UITableView` fast enough? I've tried modifying the row height to no avail however.
Edit
It looks like when I explicity set the height like this -
captionsTableView.rowHeight = 80
it works just fine...as in the cells load at 80points in height each, without the initial loading glitch.
But using captionsTableView.rowHeight = UITableViewAutomaticDimension
and captionsTableView.estimatedRowHeight = 80.0
breaks it
Edit 2 - code
class CaptionsController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var captionSegment: UISegmentedControl!
@IBOutlet weak var captionText: UINavigationItem!
@IBOutlet weak var captionSearchBar: UISearchBar!
@IBOutlet weak var captionsTitle: UILabel!
var receiveImage:UIImage!
//var receiveCategoryText:String!
//var firstNameCell: UITableViewCell = UITableViewCell()
//var firstNameText: UITextField = UITextField()
var model:ModelData!
let tapRec = UITapGestureRecognizer()
var currentCell: UITableViewCell!
var fav: String!
let basicCellIdentifier = "CustomCells"
@IBOutlet weak var captionsTableView: UITableView!
var c: CustomCells!
var captionJSON: JSON = nil
override func viewDidLoad() {
super.viewDidLoad()
model = (self.tabBarController as CaptionTabBarController).model
captionJSON = model.quoteSelection()
captionText.title = model.categoryName
captionsTableView.delegate = self
captionsTableView.dataSource = self
self.navigationController?.navigationBar.titleTextAttributes = [ NSFontAttributeName: UIFont(name: "CherrySwash-Regular", size: 25)!, NSForegroundColorAttributeName: UIColor(red:0.0/255.0, green: 159.0/255.0, blue: 172.0/255.0, alpha: 1.0)]
configureTableView()
captionsTableView.reloadData()
tapRec.numberOfTapsRequired = 2
tapRec.addTarget(self, action: "tappedView")
self.view.addGestureRecognizer(tapRec)
self.view.userInteractionEnabled = true
}
func configureTableView() {
captionsTableView.rowHeight = UITableViewAutomaticDimension
captionsTableView.estimatedRowHeight = 80.0
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
//deselectAllRows()
//captionsTableView.reloadData()
}
override func viewDidAppear(animated: Bool) {
captionsTableView.reloadData()
}
func deselectAllRows() {
if let selectedRows = captionsTableView.indexPathsForSelectedRows() as? [NSIndexPath] {
for indexPath in selectedRows {
captionsTableView.deselectRowAtIndexPath(indexPath, animated: false)
}
}
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return captionJSON.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
return customCellAtIndexPath(indexPath)
}
func customCellAtIndexPath(indexPath:NSIndexPath) -> CustomCells {
var cell = captionsTableView.dequeueReusableCellWithIdentifier(basicCellIdentifier) as CustomCells
setTitleForCell(cell, indexPath: indexPath)
setSubtitleForCell(cell, indexPath: indexPath)
setImageForCell(cell, indexPath: indexPath)
return cell
}
func setTitleForCell(cell:CustomCells, indexPath:NSIndexPath) {
let item = captionJSON[indexPath.row]["quote"]
cell.mainLabel.text = item.stringValue
}
func setSubtitleForCell(cell:CustomCells, indexPath:NSIndexPath) {
let item = captionJSON[indexPath.row]["author"]
cell.creditLabel.text = item.stringValue
}
func setImageForCell(cell:CustomCells, indexPath:NSIndexPath) {
//let item = Array(Array(model.quoteItems.values)[indexPath.row])[1] as? String
//if (item == "fav") {
//cell.favImgView.image = UIImage(named: "icon-heart-fav")!
//} else {
cell.favImgView.image = UIImage(named: "icon-heart")!
//}
}
func tappedView(){
//need to add filled icon, as well as logic to not change image upon select of favorited cell
var image : UIImage = UIImage(named: "icon-heart-fav")!
c.favImgView.image = image
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
c = captionsTableView.cellForRowAtIndexPath(indexPath) as CustomCells
var captiontabBar:CaptionTabBarController = CaptionTabBarController()
model.quote = c.mainLabel.text!
model.author = c.creditLabel.text!
println(" quote!!! " + model.quote)
self.tabBarController?.selectedIndex = 0
//let secondViewController:SelectionsController = SelectionsController()
//self.presentViewController(secondViewController, animated: true, completion: nil)
//let returnController = self.storyboard!.instantiateViewControllerWithIdentifier("selections") as? UIViewController
//self.presentViewController(returnController!, animated: true, completion: nil)
/*for tempCell: UITableViewCell in tableView.visibleCells() as [UITableViewCell] {
var image : UIImage = UIImage(named: "icon-heart")!
tempCell.imageView?.image = image
}
var image : UIImage = UIImage(named: "icon-heart-overview")!
c.favImgView?.image = image*/
}
}
class CustomCells: UITableViewCell {
@IBOutlet var mainLabel: UILabel!
@IBOutlet var creditLabel: UILabel!
@IBOutlet var favImgView: UIImageView!
}