UITableViewCell在iOS 11中的行为有所不同

时间:2017-09-25 04:59:23

标签: ios swift uitableview ios-autolayout

我已经以编程方式完成了UITableViewCell,并且它在iOS 10中工作得很好。但在使用iOS 11和XCode 9进行更新后,它的行为有所不同。布局看起来如下所示。

enter image description here

但是,如果我点击单元格,那么它会重新排列并且看起来很好,如下所示。

enter image description here

此处为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)
    }

}

以及我为TableView委托和数据源

编写的扩展
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)

    }
}

和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()


    }

1 个答案:

答案 0 :(得分:5)

由于您使用自动布局布置了tableView,因此还需要确保translatesAutoresizingMaskIntoConstraints设置为false

SnapKit应该已经为你设置了tableView的translatesAutoresizingMaskIntoConstraintsfalse

由于您手动布局单元格(使用layoutSubviews中的框架)。

可能不需要将细胞子视图的translatesAutoresizingMaskIntoConstraints设置为false

请参阅此处的Apple文档了解translatesAutoresizingMaskIntoConstraints