Как увеличить высоту UIView, которая содержит UIStackView - PullRequest
0 голосов
/ 31 января 2019

У меня есть пользовательское представление, которое содержит метку, метка может иметь многострочный текст.Поэтому я добавил эту метку в UIStackView, теперь моя высота StackView увеличивается, но высота пользовательского представления не увеличивается.Я не добавил нижнее ограничение на мой StackView.Что я должен сделать, чтобы высота CustomView также увеличивалась вместе со StackView.

 let myView = Bundle.main.loadNibNamed("TestView", owner: nil, options: nil)![0] as! TestView
    myView.lbl.text = "sdvhjvhsdjkvhsjkdvhsjdvhsdjkvhsdjkvhsdjkvhsjdvhsjdvhsjdvhsjdvhsjdvhsjdvhsjdvhsdjvhsdjvhsdjvhsdjvhsdjvhsjdvhsdjvhsdjvhsjdvhsdjvhsjdvhsdjvhsdjvhsdjvhsjdv"
    myView.lbl.sizeToFit()
    myView.frame = CGRect(x: 10, y: 100, width: UIScreen.main.bounds.width, height: myView.frame.size.height)
    myView.setNeedsLayout()
    myView.layoutIfNeeded()

    self.view.addSubview(myView)

Я хочу увеличить свою собственную высоту просмотра в соответствии с моей высотой стека.Пожалуйста помоги.

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Вы должны установить верхнюю и нижнюю привязки вашего пользовательского представления так, чтобы они ограничивались верхней и нижней привязками вашего стека.По мере роста вашего stackView оно будет увеличивать этот нижний край.Вот программный пример:

//: A UIKit based Playground for presenting user interface

import UIKit
import PlaygroundSupport

class MyViewController : UIViewController {

    private lazy var stackView = UIStackView()
    private lazy var addLabelButton = UIButton(type: .system)

    override func loadView() {
        let view = UIView()
        view.backgroundColor = .white

        let stackViewContainer = UIView(frame: view.bounds)
       stackViewContainer.backgroundColor = .yellow
        stackViewContainer.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview(stackViewContainer)
        stackView.translatesAutoresizingMaskIntoConstraints = false
        stackView.axis = .vertical

        addLabelButton.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview(addLabelButton)
        stackViewContainer.addSubview(stackView)

        NSLayoutConstraint.activate([
            // Container constrained to three edges of its superview (fourth edge will grow as the stackview grows
            stackViewContainer.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            stackViewContainer.trailingAnchor.constraint(equalTo: view.trailingAnchor),
            stackViewContainer.topAnchor.constraint(equalTo: view.topAnchor),

            // stackView constraints - stackView is constrained to the
            // for corners of its contaier, with margins
            {
                // Stackview has a height of 0 when no arranged subviews have been added.
                let heightConstraint = stackView.heightAnchor.constraint(equalToConstant: 0)
                heightConstraint.priority = .defaultLow
                return heightConstraint
            }(),
            stackView.topAnchor.constraint(equalTo: stackViewContainer.topAnchor, constant: 8),
            stackView.leadingAnchor.constraint(equalTo: stackViewContainer.leadingAnchor, constant: 8),
            stackView.trailingAnchor.constraint(equalTo: stackViewContainer.trailingAnchor, constant: -8),
            stackView.bottomAnchor.constraint(equalTo: stackViewContainer.bottomAnchor, constant: -8),

            // button constraints
            addLabelButton.topAnchor.constraint(equalTo: stackViewContainer.bottomAnchor, constant: 8),
            addLabelButton.centerXAnchor.constraint(equalTo: stackViewContainer.centerXAnchor)
            ])

        addLabelButton.setTitle("New Label", for: .normal)
        addLabelButton.addTarget(self, action: #selector(addLabel(sender:)), for: .touchUpInside)
        self.view = view
    }

    private(set) var labelCount = 0

    @objc func addLabel(sender: AnyObject?) {
        let label = UILabel()
        label.text = "Label #\(labelCount)"
        labelCount += 1
        stackView.addArrangedSubview(label)
    }
}
// Present the view controller in the Live View window
PlaygroundPage.current.liveView = MyViewController()

Обратите внимание, что когда UIStackView пуст, его высота не определена правильно.Вот почему я установил для его ограничения heightAnchor значение 0 с низким приоритетом.

0 голосов
/ 31 января 2019

Пример ограничений stackView с его суперпредставлением.Также суперпредставление не должно иметь ограничений для его высоты.

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