2017-09-25 6 views
0

J'ai effectué un UITableViewCell par programme et cela a très bien fonctionné avec iOS 10. Mais après la mise à jour avec iOS 11 et XCode 9, il se comporte différemment. La disposition semble brouillée comme ci-dessous.UITableViewCell se comporte différemment dans iOS 11

enter image description here

Mais si je tape sur la cellule, alors il réarrange et semble bien comme ci-dessous.

enter image description here

Voici le code pour UITableViewCell

import UIKit 
import SnapKit 

class AboutCell: UITableViewCell { 

    let roleLabel : UILabel = { 
     var tablelabel = UILabel() 
     tablelabel.font = UIFont (name: "Avenir Next Medium", size: 22) 
     tablelabel.textAlignment = .center 
     tablelabel.clipsToBounds = true 
     tablelabel.translatesAutoresizingMaskIntoConstraints = false 
     return tablelabel 
    }() 
    let nameLabel : UILabel = { 
     let tablelabel = UILabel() 
     tablelabel.font = UIFont (name: "Avenir Next Medium", size: 16) 
     tablelabel.textAlignment = .center 
     tablelabel.clipsToBounds = true 
     tablelabel.translatesAutoresizingMaskIntoConstraints = false 
     return tablelabel 
    }() 
    let webUrlLabel : UILabel = { 
     let tablelabel = UILabel() 
     tablelabel.font = UIFont (name: "Avenir Next Medium", size: 16) 
     tablelabel.textAlignment = .center 
     tablelabel.clipsToBounds = true 
     tablelabel.translatesAutoresizingMaskIntoConstraints = false 
     return tablelabel 
    }() 


    override init(style: UITableViewCellStyle, reuseIdentifier: String?) { 
     super.init(style: style, reuseIdentifier: reuseIdentifier) 

     setupViews() 
    } 

    override func layoutSubviews() { 
     super.layoutSubviews() 

     roleLabel.frame = CGRect(x: 0, y: 10, width: self.contentView.bounds.size.width-20, height: 25) 
     nameLabel.frame = CGRect(x: 0, y: roleLabel.frame.origin.y+25, width: self.bounds.size.width-20, height: 25) 
     webUrlLabel.frame = CGRect(x: 0, y: nameLabel.frame.origin.y+25, width: self.bounds.size.width-20, height: 25) 

    } 

    func setupViews(){ 
     contentView.addSubview(roleLabel) 
     contentView.addSubview(nameLabel) 
     contentView.addSubview(webUrlLabel) 
    } 

    func setValuesForCell(contributor : Contributors){ 
     roleLabel.text = contributor.contributorRole 
     nameLabel.text = contributor.contributorName 
     webUrlLabel.text = contributor.contributorWeb 
    } 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
    } 

} 

et l'extension j'ai écrit pour délégué TableView et datasource

extension AboutController : UITableViewDelegate, UITableViewDataSource{ 
    func numberOfSections(in tableView: UITableView) -> Int { 
     return 1 
    } 

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

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell : AboutCell = tableView.dequeueReusableCell(withIdentifier: self.cellid, for: indexPath) as! AboutCell 
     cell.selectionStyle = .default 
     let contributor : Contributors = contributorList[indexPath.row] 
     cell.setValuesForCell(contributor: contributor) 

     return cell 
    } 

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     print(indexPath.row) 

     tableView.deselectRow(at: indexPath, animated: true) 

    } 
} 

et la méthode viewDidLoad

override func viewDidLoad() { 
     super.viewDidLoad() 
     tableView.estimatedRowHeight = 100.0 
     tableView.rowHeight = 100 
     tableView.register(AboutCell.self, forCellReuseIdentifier: self.cellid) 

     view.addSubview(tableView) 
     tableView.snp.makeConstraints { (make) in 
      make.top.right.bottom.left.equalToSuperview() 
     } 

     let mayu = Contributors(contibutorRole: "Developer", contributorName: "J Mayooresan", contributorWeb: "http://jaymayu.com") 
     let janie = Contributors(contibutorRole: "Voice Artist", contributorName: "M Jananie", contributorWeb: "http://jaymayu.com") 
     let arjun = Contributors(contibutorRole: "Aathichudi Content", contributorName: "Arjunkumar", contributorWeb: "http://laymansite.com") 
     let artist = Contributors(contibutorRole: "Auvaiyar Art", contributorName: "Alvin", contributorWeb: "https://www.fiverr.com/alvincadiz18") 

     contributorList = [mayu, arjun, janie, artist] 

     tableView.delegate = self 
     tableView.dataSource = self 


     self.tableView.reloadData() 


    } 
+0

rechargent simplement votre table lorsque vous obtenez vos données –

+0

@HimanshuMoradiya oui je l'ai fait déjà, mais cela n'a pas aidé. –

+1

@ReshanKumarasingam: Où avez-vous défini la hauteur de la cellule? –

Répondre

5

Étant donné que vous disposez votre tableViewView à l'aide de la mise en page automatique, vous devez également vous assurer que translatesAutoresizingMaskIntoConstraints est défini sur false. SnapKit devrait régler les translatesAutoresizingMaskIntoConstraints de tableView à false pour vous déjà

Puisque vous disposez les cellules manuellement (en utilisant des cadres dans layoutSubviews). La définition des sous-vues translatesAutoresizingMaskIntoConstraints à false n'est probablement pas nécessaire.

Voir d'Apple Docs ici pour translatesAutoresizingMaskIntoConstraints

+0

déjà son faux, alors comment cela affecte constarints –

+0

@ReshanKumarasingam Anbu.Karthik est correct! SnapKit le définit à false pour vous déjà. Quel changement avez-vous fait pour résoudre ce problème? – ajfigueroa

+0

je ne dis pas que votre réponse est fausse, peut-être il a fixé le probelm, êtes-vous sûr que c'est le problème exact pour affecter le cadre –