Reputation: 17
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
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
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