I have some trouble with the appearance of my tableviews and cells on the iphone4s. Within the simulator and on new devices everything is fine.
UITableViewController The custom table cell (picture 1) isn't presented correctly. All the labels etc. lie on top of each other. They should be shown one below the other like they do on the simulator.
ViewController with TableView The other custom cells even don't show on the iPhone4s only a gray square appears.
I'm using Auto Layout. Do you have any suggestions?
Here's the code: 1st picture:
import UIKit
class FeedController: TableViewController {
override func viewDidLoad() {
super.viewDidLoad()
// adjusting text size without quitting app
NSNotificationCenter.defaultCenter().addObserver(self,
selector: "onContentSizeChange:",
name: UIContentSizeCategoryDidChangeNotification,
object: nil)
// set table row height
tableView.estimatedRowHeight = 89
tableView.rowHeight = UITableViewAutomaticDimension
// removes the back button after clicked on send button to write a post
self.navigationItem.hidesBackButton = true
// refresh control
self.refreshControl = UIRefreshControl()
self.refreshControl!.addTarget(self, action: Selector("refresh:"), forControlEvents: UIControlEvents.ValueChanged)
self.refreshControl!.backgroundColor = UIColor.grayColor()
self.refreshControl!.tintColor = UIColor.whiteColor()
self.tableView.addSubview(refreshControl!)
}
func reloadFeed(note: NSNotification){
tableView.reloadData()
}
func refresh(sender: AnyObject){
self.refreshControl!.endRefreshing()
}
// called when the text size was changed by the user
func onContentSizeChange(notification: NSNotification) {
tableView.reloadData()
}
}
import Foundation
import UIKit
class TableViewController: UITableViewController, UITableViewDelegate, UITableViewDataSource, PDeliversStatusAlerts {
let notifCenter = NSNotificationCenter.defaultCenter()
override init() {
super.init()
notifCenter.addObserver(self, selector: "displayConnectionLostAlert", name: kConnectionLostNotification, object: self)
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
notifCenter.addObserver(self, selector: "displayConnectionLostAlert", name: kConnectionLostNotification, object: self)
}
func displaySimpleAlert(#title:String, message:String){
var alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default, handler: nil))
self.presentViewController(alert, animated: true, completion: nil)
}
func displayModalDialog(#title: String, message: String, yesHandler: ((UIAlertAction!) -> Void)?, noHandler: ((UIAlertAction!) -> Void)?) {
var alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "Cancel", style: UIAlertActionStyle.Default, handler: yesHandler))
alert.addAction(UIAlertAction(title: "Yes", style: UIAlertActionStyle.Default, handler: noHandler))
self.presentViewController(alert, animated: true, completion: nil)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func push(sender: AnyObject) {
}
//Tableview
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
return false
}
2nd picture:
import UIKit
class NextViewController: ViewController, UITableViewDelegate, UITableViewDataSource{
var followedFeed : FollowedHashtagFeed?
var hottestFeed : HottestHashtagFeed?
var nearbyFeed : NearbyHashtagFeed?
var hashtagFeed : HashtagFeed?
@IBAction func hottestButtonTapped(sender:AnyObject) {
hashtagFeed = FeedFactory.instance().hottestHashtagFeed()
notifCenter.removeObserver(self)
notifCenter.addObserver(self, selector: "reloadFeed", name: hashtagFeed?.notificationName, object: nil)
hashtagFeed!.subscribe()
reloadFeed()
}
@IBAction func nearbyButtonTapped(sender: AnyObject) {
hashtagFeed = FeedFactory.instance().nearbyHashtagFeed()
notifCenter.removeObserver(self)
notifCenter.addObserver(self, selector: "reloadFeed", name: hashtagFeed?.notificationName, object: nil)
notifCenter.addObserver(self, selector: "didReceiveLocationPermissionNeededNotification:", name: "location_permission_needed", object: nil)
hashtagFeed!.subscribe()
reloadFeed()
}
@IBAction func followedButtonTapped(sender: AnyObject) {
hashtagFeed = FeedFactory.instance().followedHashtagFeed()
notifCenter.removeObserver(self)
notifCenter.addObserver(self, selector: "reloadFeed", name: hashtagFeed?.notificationName, object: nil)
hashtagFeed!.subscribe()
reloadFeed()
}
override func viewDidLoad() {
super.viewDidLoad()
//set table row height
tableView.rowHeight = UITableViewAutomaticDimension
//load feed cell
var nipName=UINib(nibName: "NextTableCell", bundle:nil)
self.tableView.registerNib(nipName, forCellReuseIdentifier: "nextCell")
followedButtonTapped(followedButton)
view.setNeedsLayout()
view.layoutIfNeeded()
println("Frame Height:")
println(tableView.frame.height)
println(tableView.bounds.height)
println("Frame Width:")
println(self.tableView.frame.width)
println(self.tableView.bounds.width)
/*
hashtagFeed = FeedFactory.instance().followedHashtagFeed()
//subscribe to feed changes
notifCenter.addObserver(self, selector: "reloadFeed", name: hashtagFeed?.notificationName, object: nil)
hashtagFeed!.subscribe()*/
}
func didReceiveLocationPermissionNeededNotification(note: NSNotification){
displayModalDialog(
title: "Location Permission Needed",
message: "In order to use this functionality the app needs your permission to use location data - do you want to give this permission now?",
yesHandler: {
(action: UIAlertAction!) in LocationHelper.instance().askForPermission()
},
noHandler: nil
)
}
//Tableview
func reloadFeed(){
tableView.reloadData()
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return hashtagFeed!.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("nextCell", forIndexPath: indexPath) as NextTableCell
let hashtag = hashtagFeed!.toArray()[indexPath.row]
cell.loadItem(hashtag)
return cell
}
func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {
}
}