Можете ли вы предоставить границы UIStackView?
Я пытаюсь дать 5 отдельных UIStackViews
в моих границах ViewController
. Я дал каждому из них IBOutlet
, а затем вызвал их в viewDidLoad
, чтобы использовать свойство layer
, но безрезультатно. Невозможно ли программно отображать границы стека?
код:
@IBOutlet weak var stackView1: UIStackView!
@IBOutlet weak var stackView2: UIStackView!
@IBOutlet weak var stackView3: UIStackView!
@IBOutlet weak var stackView4: UIStackView!
@IBOutlet weak var stackView5: UIStackView!
override func viewDidLoad() {
super.viewDidLoad()
stackView1.layer.borderWidth = 5
stackView2.layer.borderWidth = 5
stackView3.layer.borderWidth = 5
stackView4.layer.borderWidth = 5
stackView5.layer.borderWidth = 5
}
Ответы
Ответ 1
К сожалению, это невозможно. UIStackView необычен тем, что представляет собой представление "без рендеринга", которое выполняет макет (с использованием ограничений Auto Layout), но не отображает себя. Он имеет слой, подобный всем UIViews, но он игнорируется.
Смотрите документ Apple в разделе "Управление представлением просмотра стека":
UIStackView - это неиндексирующий подкласс UIView. Это не предоставить любой пользовательский интерфейс. Вместо этого он просто управляет положение и размер его размещенных видов. В результате некоторые свойства (например, backgroundColor) не влияют на представление стека. По аналогии, вы не можете переопределить layerClass, drawRect:, или drawLayer: inContext:
Ответ 2
Его можно сделать, если представления в представлении стека являются границами. Это может быть много работы, и могут быть определенные ситуации, которые либо не будут работать, либо должны быть обработаны, поэтому это может не стоить усилий. Вам нужно будет вложить представления стека, чтобы вы могли предоставлять границы как по горизонтали, так и по вертикали. В моем сообщении Bordered Stack Views я подробно расскажу об этом. Но в основном у меня есть регулярные представления, у меня есть фон, заданный по цвету моего выбора, и я даю ограничения по высоте или ширине 1 в зависимости от направления оси представления стека. Вот полная иерархия сетки 2x2, встроенная в построитель интерфейсов:
![иерархия представлений]()
Результат в этом результате:
![введите описание изображения здесь]()
Здесь ссылка на мое github repo этого примера, чтобы вы могли видеть файл раскадровки.
Ответ 3
Вы можете вставлять stackView внутри UIView, затем устанавливать границы этого вида (цвет, ширина и т.д.), а затем привязывать stackView к этому UIView, как верх, левый, правый, высоту.