У меня есть представление внутри прокрутки:
Теперь я хочу программно добавить дочерние виды в это представление. Вот мой код, чтобы сделать это:
дочерний вид (работает)
//Adds header to the view again because it was removed in the clear() method
//Header is just a label
lv.addSubview(header)
header.leadingAnchor.constraint(equalTo: header.superview!.leadingAnchor).isActive = true
header.topAnchor.constraint(equalTo: header.superview!.topAnchor, constant: 2).isActive = true
header.widthAnchor.constraint(equalTo: header.superview!.widthAnchor).isActive = true
header.heightAnchor.constraint(equalToConstant: MainTabViewController.fontSize*3).isActive = true //Just a constant
Теперь я выполняю этот код несколько раз:
private func makeTextLabel(text: NSAttributedString, bgColor: UIColor?, maxWidth: CGFloat?) -> UILabel {
//Creates label
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
lv.addSubview(label)
//Adjustments
if(bgColor != nil) {
label.backgroundColor = bgColor
}
label.textColor = UIColor.black
label.attributedText = text
label.numberOfLines = 0
label.lineBreakMode = NSLineBreakMode.byWordWrapping
let width = maxWidth ?? lv.frame.size.width-8
label.widthAnchor.constraint(equalToConstant: width).isActive = true
label.heightAnchor.constraint(equalToConstant: heightForLabel(attributedText: label.attributedText, width: width)).isActive = true
label.leadingAnchor.constraint(equalTo: lv.leadingAnchor, constant: 4).isActive = true
let previousView = lv.subviews[lv.subviews.count-1]
label.topAnchor.constraint(equalTo: previousView.bottomAnchor, constant: 10).isActive = true
return label
}
Все метки добавлены, но ограничения не работают вообще. Вот как это выглядит (когда я выполняю метод выше 2 раза):
РЕДАКТИРОВАТЬ: Основная проблема решена. Сейчас я использую StackView. ({ ссылка })
Теперь я хочу, чтобы мои метки имели смещение по краям, поэтому я использую эти строки:
label.leadingAnchor.constraint(equalTo: lessonStackView.leadingAnchor, constant: offset).isActive = true
label.trailingAnchor.constraint(equalTo: lessonStackView.trailingAnchor, constant: -offset).isActive = true
Но так как StackView, кажется, сам устанавливает x-ограничения, я получаю это предупреждение:
Невозможно одновременно удовлетворить ограничения. Возможно, по крайней мере одно из ограничений в следующем списке - это то, что вам не нужно. Попробуйте это: (1) посмотреть на каждое ограничение и попытаться выяснить, чего вы не ожидаете; (2) найдите код, который добавил нежелательное ограничение или ограничения, и исправьте его. ("UILabel: 0x7f9c16c22c30'Falls dir d ie App gef \ U00e4llt ... '(active, names:' | ': JavaProf.MultipleContentsView: 0x7f9c19024a60)>", "", "") *
Будет ли попытаться восстановить, нарушив ограничение
Как я могу решить это?