Ограничения не могут добавить отступы - PullRequest
0 голосов
/ 24 октября 2018

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

Верхняя кнопка - это то, что я ожидаю (и что я 'созданный в конструкторе интерфейсов, игнорируйте различия шрифтов).Дно - это то, что я получаю.Нет выдаваемых ошибок / предупреждений, но размер суперпредставления не изменяется.

enter image description here

class RoundedButton3: UIView {

var stringLabel: UILabel
var numberLabel: UILabel
var leftBackground: UIView
var rightBackground: UIView
var stackView: UIStackView

override init(frame: CGRect) {
    stringLabel = UILabel()
    numberLabel = UILabel()
    leftBackground = UIView()
    rightBackground = UIView()
    stackView = UIStackView()
    super.init(frame: frame)

    self.contentMode = .scaleToFill
    self.autoresizingMask = [.flexibleBottomMargin, .flexibleTopMargin, .flexibleLeftMargin, .flexibleRightMargin]

    self.translatesAutoresizingMaskIntoConstraints = false

    stringLabel.translatesAutoresizingMaskIntoConstraints = false
    numberLabel.translatesAutoresizingMaskIntoConstraints = false
    leftBackground.translatesAutoresizingMaskIntoConstraints = false
    rightBackground.translatesAutoresizingMaskIntoConstraints = false
    stackView.translatesAutoresizingMaskIntoConstraints = false


    self.addSubview(stackView)
    leftBackground.addSubview(stringLabel)
    rightBackground.addSubview(numberLabel)
    stackView.addArrangedSubview(leftBackground)
    stackView.addArrangedSubview(rightBackground)

    stackView.axis = .horizontal
    stackView.alignment = .fill
    stackView.distribution = .fill

    stringLabel.setContentHuggingPriority(UILayoutPriorityRequired, for: .horizontal)
    stringLabel.setContentHuggingPriority(UILayoutPriorityRequired, for: .vertical)
    stringLabel.setContentCompressionResistancePriority(UILayoutPriorityRequired, for: .horizontal)
    stringLabel.setContentCompressionResistancePriority(UILayoutPriorityRequired, for: .vertical)
    numberLabel.setContentHuggingPriority(UILayoutPriorityRequired, for: .horizontal)
    numberLabel.setContentHuggingPriority(UILayoutPriorityRequired, for: .vertical)
    numberLabel.setContentCompressionResistancePriority(UILayoutPriorityRequired, for: .horizontal)
    numberLabel.setContentCompressionResistancePriority(UILayoutPriorityRequired, for: .vertical)

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

    leftBackground.leftAnchor.constraint(equalTo: stringLabel.leftAnchor, constant: 4).isActive = true
    leftBackground.rightAnchor.constraint(equalTo: stringLabel.rightAnchor, constant: 4).isActive = true
    leftBackground.topAnchor.constraint(equalTo: stringLabel.topAnchor, constant: 4).isActive = true
    leftBackground.bottomAnchor.constraint(equalTo: stringLabel.bottomAnchor, constant: 4).isActive = true

    rightBackground.leftAnchor.constraint(equalTo: numberLabel.leftAnchor, constant: 4).isActive = true
    rightBackground.rightAnchor.constraint(equalTo: numberLabel.rightAnchor, constant: 4).isActive = true
    rightBackground.topAnchor.constraint(equalTo: numberLabel.topAnchor, constant: 4).isActive = true
    rightBackground.bottomAnchor.constraint(equalTo: numberLabel.bottomAnchor, constant: 4).isActive = true

    stringLabel.text = "RESERVE"
    numberLabel.text = "10"

    stringLabel.textColor = AppColors.WSF_GREEN
    numberLabel.textColor = UIColor.white
    rightBackground.backgroundColor = AppColors.WSF_GREEN
    leftBackground.backgroundColor = UIColor.white
    self.layer.borderColor = AppColors.WSF_GREEN.cgColor
    self.layer.borderWidth = 3
    self.layer.cornerRadius = 4
    self.layer.masksToBounds = true
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

}

1 Ответ

0 голосов
/ 24 октября 2018

Для определения заполнения вы можете использовать свойство layoutMargins содержащего представления.Вы можете обратиться к этому ответу: Добавление отступов к UIView .

...