我是swift和ios开发的新手。我在tableview中显示json。由于某些原因,tableview没有滚动到底部(3个单元格)。 这是tableview所在的UITableView的代码:
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)
}
}
答案 0 :(得分:0)
这必须是tableView的高度
在ViewDidLoad
放置此行
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)
这将使tableView
结尾的高度在self.view内不在其外
这个想法是检查tableView所有它出现在它的容器中,给tableView背景一个不同的颜色看看更好
答案 1 :(得分:0)
我不明白你的问题
加载完成后,tableview不会自动滚动到底部
OR
在上拉时不能滚动到底部?
注意:如果您为uitableview设置了约束,则无法为其设置名声。但如果你想这样做,试试:
yourView.translatesAutoresizingMaskIntoConstraints = true
答案 2 :(得分:0)
确保将User Interaction Enabled设置为true