Квадратный UIImageView и UITextField в UITableViewCell - PullRequest
0 голосов
/ 03 марта 2019

Я пытаюсь создать ячейку, которая содержит квадратный UIImageView и UITextField.Если текст соответствует ширине экрана, то все работает нормально.Но как только я меняю текст на более длинный, презентация ломается.В консоли нет сообщений о правильности ограничений.

Когда текст в UITextField помещается на экране или UITextField содержит только заполнитель, все работает нормально.

screenshot when all works fine

Но если текст достаточно длинный, презентация разбивается.

enter image description here

Код, с помощью которого я создаюпредставление:

extension TextFieldWithImageTVCell {

    private func initView() {
        selectionStyle = .none
        initImgView()
        initTextField()
        contentView.addSubview(imgView)
        contentView.addSubview(textField)

        // debug code
        imgView.backgroundColor = UIColor.black
        textField.backgroundColor = UIColor.blue
    }

    private func initImgView() {
        imgView = UIImageView(frame: CGRect.zero)
        imgView.translatesAutoresizingMaskIntoConstraints = false
    }

    private func initTextField() {
        textField = UITextField(frame: CGRect.zero)
        textField.translatesAutoresizingMaskIntoConstraints = false
        textField.isUserInteractionEnabled = false
    }

}

Код, с помощью которого я создаю ограничения:

extension TextFieldWithImageTVCell {

    private func initConstraints() {
        initConstraintsImgView()
        initConstraintsTextField()
    }

    private func initConstraintsImgView() {
        imgView.heightAnchor.constraint(equalTo: imgView.widthAnchor).isActive = true
        let margins = contentView.layoutMarginsGuide
        imgView.leadingAnchor.constraint(equalTo: margins.leadingAnchor).isActive = true
        imgView.topAnchor.constraint(equalTo: margins.topAnchor).isActive = true
        imgView.bottomAnchor.constraint(equalTo: margins.bottomAnchor).isActive = true
    }

    private func initConstraintsTextField() {
        textField.leadingAnchor.constraint(equalTo: imgView.trailingAnchor, constant: 8).isActive = true
        let margins = contentView.layoutMarginsGuide
        textField.topAnchor.constraint(equalTo: margins.topAnchor).isActive = true
        textField.trailingAnchor.constraint(equalTo: margins.trailingAnchor).isActive = true
        textField.bottomAnchor.constraint(equalTo: margins.bottomAnchor).isActive = true
    }

}

Часть кода, с которой я настраиваю ячейку:

cell.textContent = subject
cell.placeholder = "Предмет"
cell.isEditingEnabled = true

guard let textField = cell.textField else {
    assertionFailure("error in ItemSubject::configureCellForRow")
    return
}

textField.delegate = self
textField.clearButtonMode = .always
textField.adjustsFontSizeToFitWidth = true
textField.minimumFontSize = 10

Свойства ячейки:

extension TextFieldWithImageTVCell {

    var placeholder: String? {
        set { textField.placeholder = newValue }
        get { return textField.placeholder }
    }

    var textContent: String? {
        set { textField.text = newValue }
        get { return textField.text }
    }

    var isEditingEnabled: Bool {
        set { textField.isUserInteractionEnabled = newValue }
        get { return textField.isUserInteractionEnabled }
    }

}

Какие ограничения мне нужно добавить для достижения желаемого результата?Почему моих ограничений недостаточно?

...