Swift: вид элемента веса StackView - PullRequest
0 голосов
/ 27 августа 2018

Я создал класс UIView, и в этом классе я создаю табличное представление и кнопку.

Я бы хотел настроить вес этих двух изображений, как в Android.

Кнопка сделана слишком тяжело. Я хочу присвоить ей вес 1, а для таблицы - 2

.

Вот фото: enter image description here

Вот мой код:

class ChatBotCheckList: UIView {

    var tableView: UITableView = {
        let tableView = UITableView()
        tableView.register(ChatBotCheckListCell.self, forCellReuseIdentifier: "MyCell")
        tableView.translatesAutoresizingMaskIntoConstraints = false

        return tableView
    }()

    let doneButton: FilledButton = {
        let doneButton = FilledButton(backgroundColor: .fittoOnboardingGradientStart, textColor: .white, cornerRadius: 5.0, shadowColor: .fittoOnboardingGradientEnd)
        doneButton.translatesAutoresizingMaskIntoConstraints = false
        doneButton.titleLabel?.font = .boldSystemFont(ofSize: 17.0)
        doneButton.setTitle("Done", for: .normal)
        return doneButton
    }()

    let stackView: UIStackView = {
        let stackView = UIStackView()
        stackView.translatesAutoresizingMaskIntoConstraints = false
        stackView.axis = .vertical
        stackView.alignment = .fill
        stackView.distribution = .fillEqually
        stackView.spacing = 10.0
        return stackView
    }()

    var answers = [ChatBotAnswer]() {
        didSet {
            setupStackView()
            tableView.reloadData()
        }
    }

    override init(frame: CGRect) {
        super.init(frame: frame)

        tableView.delegate = self
        tableView.dataSource = self
        tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }


    // MARK: Lifecycle

    override func layoutSubviews() {
        super.layoutSubviews()
    }

}


// MARK: - Setup UI

extension ChatBotCheckList {

    fileprivate func setupUI() {
        addSubview(stackView)
        let topAnchorPadding: CGFloat = answers.count <= 2 ? 50.0 : 0
        stackView.anchor(top: topAnchor, leading: leadingAnchor, bottom: bottomAnchor, trailing: trailingAnchor, padding: UIEdgeInsets(top: topAnchorPadding, left: 28.0, bottom: 0, right: 28.0), size: .zero)
    }

    private func setupDoneButton() {
        doneButton.alpha = 0
        //doneButton.addTarget(self, action: #selector(doneButtonTapped(_:)), for: .touchUpInside)
    }

    private func setupStackView() {
        addSubview(stackView)
        stackView.anchor(top: topAnchor, leading: leadingAnchor, bottom: bottomAnchor, trailing: trailingAnchor, padding: UIEdgeInsets(top: 90.0, left: 28.0, bottom: 20.0, right: 28.0))
        stackView.addArrangedSubview(tableView)
        stackView.addArrangedSubview(doneButton)
        setupUI()
    }

}


// MARK: - Setup Table View

extension ChatBotCheckList: UITableViewDataSource, UITableViewDelegate {

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return answers.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "MyCell", for: indexPath)
        cell.textLabel!.text = "\(answers[indexPath.row].message)"
        return cell
    }

}

1 Ответ

0 голосов
/ 27 августа 2018

Вы можете установить ограничение:

doneButton.heightAnchor.constraint(equalToConstant: 100)

Взглянув на ваш код, вы увидите, что есть множество вещей, которые вы можете сделать / решить с помощью Interface Builder. Рассматривали ли вы создание раскадровки и установление там всевозможных ограничений?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...