Как установить правильные ограничения на мои UITable Cells.Swift4 - PullRequest
0 голосов
/ 15 марта 2019

Я новичок в Swift, и у меня возникли небольшие проблемы с настройкой правильных ограничений для моей таблицы.

У меня есть таблица, которая заполняется с помощью массива. У меня есть три подпредставления, которые нужно поместить друг под другом. Вот результат, который я получаю:

enter image description here

Как вы видите, часть моей оранжевой клетки отрезана красной клеткой. (Я пробовал несколько других ограничений, но это самое близкое, что я получил к желаемому эффекту.

Я понимаю, почему это происходит. Это потому, что я поставил bottomAnchor на parentView с topAnchor mainView, и я также делаю то же самое для commentView.

Я думаю, правильной настройкой будет изменение ограничения на:

parentView.bottomAnchor.constraint(equalTo: self.commentView.topAnchor).isActive = true
mainView.topAnchor.constraint(equalTo: self.parentView.bottomAnchor).isActive = true

Но это удаляет основной вид с экрана. в результате:

enter image description here

Как их аккуратно подложить друг к другу?

override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?){
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        self.addSubview(commentView)
        self.addSubview(parentView)
        self.addSubview(mainView)

        parentView.leftAnchor.constraint(equalTo: self.leftAnchor).isActive = true
        parentView.rightAnchor.constraint(equalTo: self.rightAnchor).isActive = true
        parentView.topAnchor.constraint(equalTo: self.topAnchor).isActive = true
        parentView.bottomAnchor.constraint(equalTo: self.mainView.topAnchor).isActive = true
        parentView.heightAnchor.constraint(equalToConstant: 50).isActive = true


        mainView.leftAnchor.constraint(equalTo: self.leftAnchor).isActive = true
        mainView.rightAnchor.constraint(equalTo: self.rightAnchor).isActive = true
        mainView.bottomAnchor.constraint(equalTo: self.bottomAnchor).isActive = true
        mainView.heightAnchor.constraint(equalToConstant: 80).isActive = true



        commentView.leftAnchor.constraint(equalTo: self.leftAnchor).isActive = true
        commentView.rightAnchor.constraint(equalTo: self.rightAnchor).isActive = true
        commentView.topAnchor.constraint(equalTo: self.mainView.bottomAnchor).isActive = true
        commentView.heightAnchor.constraint(equalToConstant: 20).isActive = true
    }

Желаемый результат будет примерно таким:

enter image description here

1 Ответ

0 голосов
/ 15 марта 2019

Хорошо, я понял.решил это, превратив его в представление стека со следующим добавленным кодом:

var parentView : UITextView = {
    var textView = UITextView()
    textView.translatesAutoresizingMaskIntoConstraints  = false
    textView.isScrollEnabled = false
    textView.backgroundColor = orangeBanner
    textView.heightAnchor.constraint(equalToConstant: 50.0).isActive = true
    return textView

}()

var mainView : UITextView = {
    var textView = UITextView()
    textView.translatesAutoresizingMaskIntoConstraints  = false
    textView.backgroundColor = grayBanner
    textView.isScrollEnabled = false
    textView.heightAnchor.constraint(equalToConstant: 100.0).isActive = true
    return textView

}()

var commentView : UITextView = {
    var textView = UITextView()
    textView.translatesAutoresizingMaskIntoConstraints  = false
    textView.isScrollEnabled = false
    textView.backgroundColor = UIColor.red
    textView.heightAnchor.constraint(equalToConstant: 30.0).isActive = true
    return textView

}()

lazy var stackView: UIStackView = {
    let sv = UIStackView(arrangedSubviews: [parentView, mainView, commentView])
    sv.translatesAutoresizingMaskIntoConstraints = false
    sv.axis = .vertical
    sv.spacing = 0

    return sv

}()


self.addSubview(stackView)

stackView.leftAnchor.constraint(equalTo: self.leftAnchor).isActive = true
stackView.rightAnchor.constraint(equalTo: self.rightAnchor).isActive = true
stackView.topAnchor.constraint(equalTo: self.topAnchor).isActive = true
stackView.bottomAnchor.constraint(equalTo: self.bottomAnchor).isActive = true

Спасибо, что указали мне правильное направление!

...