Kamola Amanova
Kamola Amanova

Reputation: 17

Tableview not scrolling to bottom

I'm new to swift and ios development in general. I'm displaying json in tableview.For some reasons,tableview is not scrolling to bottom(3 cells). Here is my code for the UITableView that the tableview resides:

class AllChaptersViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {

@IBOutlet weak var tableView: UITableView!
var isLoadingTableView = true
var chapters = [Chapter]()  //Chaper Array
var chapter = [ChapterMO]()
var imageURLs = [String]()
var chaptersArray = [AnyObject]()
var base = [AnyObject]()
var uri =  ""
var path = ""
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

override func viewDidLoad() {
    super.viewDidLoad()

    Alamofire.request("https://appdata.omicronenergy.com/webindex/COMP-en.json").responseJSON { response in debugPrint(response)
        let result = response.result
        if let dict = result.value as? Dictionary<String,AnyObject>{
            if let arr = dict["data"] as! NSArray?{
                self.chaptersArray = arr as [AnyObject]
                self.tableView.reloadData()
            }
        }
    }


    Alamofire.request("https://appdata.omicronenergy.com/webindex/products-en.json").responseJSON {
        response in debugPrint(response)
        let result = response.result
        if let json = result.value as? Dictionary<String,AnyObject>{
            if let arr = json["data"] as! NSArray? {
                let tmpJson = arr[0] as! [String:AnyObject]
                self.uri = tmpJson["uri"] as! String
            }
        }
    }

    tableView.layoutMargins = .zero
    tableView.separatorInset = .zero
    tableView.contentInset = .zero
    self.automaticallyAdjustsScrollViewInsets = false
    tableView.tableFooterView = UIView()
    self.tableView.rowHeight = UITableViewAutomaticDimension
    self.tableView.reloadData()

    // Read qr code

    let qrCodeButton = UIBarButtonItem(image: UIImage(named:"qrCode"),
                                       style: .plain,
                                       target: self,
                                       action: #selector(AllChaptersViewController.readQrCode(_:)))

    let moreButton = UIBarButtonItem(image: UIImage(named:"more"),
                                     style: .plain,
                                     target: self,
                                     action: #selector(AllChaptersViewController.openDropDownMenu(_:)))

    self.navigationItem.rightBarButtonItems = [moreButton,qrCodeButton]

     }

override var prefersStatusBarHidden: Bool{
    return true
}

func readQrCode(_ sender:UIBarButtonItem!) {
    print("working")
    let vc = self.storyboard?.instantiateViewController(withIdentifier: "QRCodeViewController")
    self.navigationController!.pushViewController(vc!, animated: true)
    print("")
}

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

func openDropDownMenu(_ sender:UIBarButtonItem!) {
    print("works too")
}


override func viewWillAppear(_ animated: Bool) {
    self.navigationItem.title = "COMPANO 100"
     self.tableView.layoutSubviews()
}


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

func getData(){
    do{
        chaptersArray = try context.fetch(ChapterMO.fetchRequest())
    }
    catch {
        print("Fetching failed")
    }
}



func numberOfSections(in tableView: UITableView) -> Int {
    // #warning Incomplete implementation, return the number of sections
    return 1
}



func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell:TableViewCell = tableView.dequeueReusableCell(withIdentifier: "chapterCell", for: indexPath) as! TableViewCell
    let object = chaptersArray[indexPath.row] as! NSDictionary

    let path = object.object(forKey: "path") as! String
    let iconUrl = "https://appdata.omicronenergy.com/chapter_icons/COMP0\(path).png"

    cell.icon.sd_setImage(with: URL(string:iconUrl))
    cell.layoutMargins = .zero
    let name = object.object(forKey: "name") as! String
    cell.chapterName?.text = name
    return cell
}

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

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let path = chaptersArray[indexPath.row]["path"]
    let vc = self.storyboard?.instantiateViewController(withIdentifier: "ChapterViewController") as! ChapterViewController
    let baseURL = uri
    let title = chaptersArray[indexPath.row]["name"]
    vc.title = title as! String
    vc.baseURL = baseURL
    vc.path = path! as! String
    self.navigationController?.pushViewController(vc, animated: true)
}

}

Upvotes: 1

Views: 4234

Answers (3)

Andrei Erdoss
Andrei Erdoss

Reputation: 1643

Make sure to have User Interaction Enabled set to true

Upvotes: -1

Nguyen Hoan
Nguyen Hoan

Reputation: 1693

i don't understand your problem
tableview is not auto scrolling to bottom when load finish OR
CAN NOT scrolling to bottom when you pullup?

Note: if you set contraint for uitableview, you can not set fame for it. but if you want do it, try:

yourView.translatesAutoresizingMaskIntoConstraints = true

Upvotes: 0

Mostafa Sultan
Mostafa Sultan

Reputation: 2438

This must be the height of the tableView to make sure of my idea in the ViewDidLoad put this line

self.tableView.frame = CGRect(x: self.tableView.frame.origin.x, y: self.tableView.frame.origin.y, width: self.tableView.frame.size.width, height: self.view.frame.size.height - self.tableView.frame.origin.y)

this will make the height of the tableView end just within the self.view not outside it

the idea is to check that the tableView all of it appears within it's container , give the tableView background a different color to see better

Upvotes: 3

Related Questions