Я пытаюсь получить следующий макет (представления по центру по горизонтали):
![enter image description here](https://i.stack.imgur.com/YKwwS.png)
Поэтому я настроил вид стека следующим образом:
let quickPromptsView: UIStackView = {
let sv = UIStackView()
sv.axis = .horizontal
sv.alignment = .center
sv.distribution = .equalSpacing
sv.spacing = 10
sv.translatesAutoresizingMaskIntoConstraints = false
return sv
}()
Добавление кнопок в представления стека:
func addOptions(options: [DialogNodeOutputOptionsElement]) {
DispatchQueue.main.async {
// clear all subviews
self.quickPromptsView.subviews.forEach { (view) in
view.removeFromSuperview()
}
for option in options {
let button = QuickPromptButton()
button.setTitle(option.label, for: .normal)
button.addTarget(self, action: #selector(self.didTapQuickPrompt), for: .touchUpInside)
self.quickPromptsView.addArrangedSubview(button)
}
}
}
Класс кнопок:
class QuickPromptButton: UIButton {
var userFacingValue: String?
var answerValue: String?
override init(frame: CGRect) {
super.init(frame: frame)
layer.borderColor = UIColor.primaryColor.cgColor
layer.borderWidth = 1
layer.cornerRadius = 15
setTitleColor(.primaryColor, for: .normal)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
Так я добавляю представление стека, добавляя его в другой стек часть MessageKit
func configureQuickPromptsView() {
view.addSubview(quickPromptsView)
quickPromptsView.heightAnchor.constraint(equalToConstant: 40).isActive = true
// this stack view belongs to the MessageKit library
messageInputBar.topStackView.axis = .horizontal
messageInputBar.topStackView.distribution = .fill
messageInputBar.topStackView.addArrangedSubview(quickPromptsView)
}
Однако вот что я получаю:
![enter image description here](https://i.stack.imgur.com/uZnYM.png)
Стек вид имеет 100% ширину экрана. Я пробовал каждый тип distribution
, но это не сработало. Я также пытался вставить прозрачные UIView
s в крайних случаях, чтобы вызвать центрирование, но это похоже на хак. Есть идеи?