TableviewCell: программно устанавливать ограничения внутри ContentView, используя авторазмер - PullRequest
0 голосов
/ 23 октября 2019

Я пытаюсь ограничить элементы (UIView или UITextfield) в TableViewCell. Если я использую кадр, какUITextField(frame: CGRect(x: 150, y: 0, width: 500, height: 110))все отлично работаетНо я пытаюсь использовать авторазмер и как-то мое UITextfield, добавленное как SubView в моей ячейке, не имеет того же предка. Сообщение об ошибке: "у них нет общего предка. Ссылка на ограничение или его привязки ссылается на элементы в разных иерархиях представления?"

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

        var Testtext: UITextField{
            let test = UITextField(frame: CGRect(x: 150, y: 0, width: 500, height: 110))
            test.textColor = .red
            test.font = .boldSystemFont(ofSize: 22)
            test.text = "Hello World"
            return test
        }


        var cell:UITableViewCell {
            let createdCell = UITableViewCell()
            createdCell.contentView.addSubview(Testtext)
//            Testtext.translatesAutoresizingMaskIntoConstraints = false
//            NSLayoutConstraint.activate([
//                Testtext.topAnchor.constraint(equalTo:  createdCell.topAnchor),
//                Testtext.bottomAnchor.constraint(equalTo: createdCell.bottomAnchor),
//                Testtext.trailingAnchor.constraint(equalTo: createdCell.trailingAnchor),
//                Testtext.leadingAnchor.constraint(equalTo: createdCell.leadingAnchor)
//                ])
            return createdCell
        }

Кстати, я не хочу создавать Cellclass, потому что мне нужно настроить количество Textfields и UIViews в зависимости от входного массива.

1 Ответ

1 голос
/ 23 октября 2019

Вам нужно

var cell:UITableViewCell {
        let createdCell = UITableViewCell()
        createdCell.contentView.addSubview(Testtext)
       Testtext.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate([
            Testtext.topAnchor.constraint(equalTo:  createdCell.contentView.topAnchor),
            Testtext.bottomAnchor.constraint(equalTo: createdCell.contentView.bottomAnchor),
            Testtext.trailingAnchor.constraint(equalTo: createdCell.contentView.trailingAnchor),
            Testtext.leadingAnchor.constraint(equalTo: createdCell.contentView.leadingAnchor)
        ])
        return createdCell
}

, но это не правильный способ dequeueResuableCell внутри cellForRowAt для генерации ячеек вместо создания переменных

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
   let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! CustomCell 
   return cell
}
...