SnapKit - высота UITableView не изменяется при динамическом содержимом ячейки - PullRequest
0 голосов
/ 09 октября 2018

Я новичок в SnapKit, я хочу реализовать UITableViewController со SnapKit, в каждой строке по две UILabel, одна из них - Title, а другая - Value.Моя проблема заключается в том, что высота строки в UITableView не изменяется в зависимости от содержимого каждой строки.вот мой код:

класс ViewController:

import UIKit
import SnapKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

// MARK: Property List
var list: NSMutableArray?
let myTableView: UITableView = {
   let table = UITableView()
    return table
}()

//MARK: Life Cycle
override func viewDidLoad() {
    super.viewDidLoad()
    self.myTableView.rowHeight = UITableView.automaticDimension
    self.myTableView.estimatedRowHeight = 100
    title = "TableView Page"
    setup()
    setupViews()

}

// MAKR: Setup View
func setup() {
    self.view.backgroundColor = .white
    navigationController?.navigationBar.prefersLargeTitles = true
}

func setupViews () {
    self.view.addSubview(myTableView)
    myTableView.snp.makeConstraints { make in
        make.top.left.bottom.right.equalTo(10)
    }
    myTableView.register(CustomCell.self, forCellReuseIdentifier: CustomCell.customCell)
    myTableView.delegate = self
    myTableView.dataSource = self
}

// MARK: TableView DataSource
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 10
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: CustomCell.customCell, for: indexPath) as! CustomCell
    cell.title.text = "title is lognest??"
    cell.value.text = (indexPath.row % 2 == 0) ?
     "longest value longest value longest value longest value longest value longest value longest value for text"
        : "short value"
    cell.title.snp.makeConstraints { (make) in
        make.top.equalTo(cell.value.snp.top)
        make.left.equalTo(20)
        make.trailing.equalTo(cell.value.snp.leading)
    }
    cell.value.snp.makeConstraints { (make) in
        make.right.equalTo(-20)
        make.top.equalTo(cell.title.snp.top)
        make.bottom.equalTo(-10)
    }

    NSLog("value height is: \(cell.value.frame.height)")
    NSLog("cell height is: \(cell.frame.height)")
        return cell;
    }    
}

класс CustomCell:

// MARK: custom cell
class CustomCell: UITableViewCell {

// MARK: Property
static var customCell = "cell"
public var title:UILabel = {
    let tit = UILabel()
    tit.setContentHuggingPriority(.defaultLow, for: .horizontal)
    tit.setContentCompressionResistancePriority(.defaultHigh, for: .horizontal)
    tit.textColor = .black
    tit.alpha = 0.6
    return tit
}()
public var value:UILabel = {
    let val = UILabel()
    val.textColor = .black
    val.setContentHuggingPriority(.defaultHigh, for: .horizontal)
    val.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
    val.lineBreakMode = NSLineBreakMode.byWordWrapping
    val.numberOfLines = 0
    val.alpha = 0.75
    return val
}()

// MARK: initializer
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
    super.init(style: style, reuseIdentifier: reuseIdentifier)
    self.addSubview(title)
        self.addSubview(value)
}

    required init?(coder aDecoder: NSCoder) {
        fatalError("init?(coder aDecoder: NSCoder)")
    }
}

А это консольные журналы:

snapkitTest [26345: 1387159] высота ячейки составляет: 44,0
snapkitTest [26345: 1387159] высота значения: 0,0

Screen Shot of TableView on iPhone XR

1 Ответ

0 голосов
/ 09 октября 2018

1 - Вы должны добавить метку к

self.contentView.addSubview(title)

2 - Вам необходимо установить нижнее ограничение для contentView

title.snp.makeConstraints { (make) -> Void in
        make.trailing.equalTo(value.snp.leading)
        make.top.equalTo(self.contentView.snp.top).inset(10)
        make.left.equalTo(20)
    }
value.snp.makeConstraints { (make) -> Void in
        make.right.equalTo(-40)
        make.top.equalTo(self.contentView.snp.top).inset(10)
        make.bottom.equalTo(-10)
    }

Также перенести это ограничение в инициализацию пользовательского класса ячейки., чтобы не перезаписывать ограничения каждый свиток tableView

...