Существует новая альтернатива использованию VFL, которую я сейчас использую в коде.
Якоря макета
Каждое представление имеет различные anchor
с.leading
, trailing
, top
, bottom
и т. Д. ...
Вы можете использовать их для создания ограничений ...
NSLayoutConstraint.activate([
viewB.leadingAnchor.constraint(equalTo: viewA.leadingAnchor, constant: 20),
viewA.widthAnchor.constraint(equalTo: viewB.widthAnchor)
])
, например.
Просмотр стека
В дополнение к этому существует еще более современный подход, который заключается в использовании UIStackView
.Это действительно полезное представление, которое устраняет необходимость добавлять ограничения и делает это за вас.
let stackView = UIStackView(arrangedSubViews: [viewA, viewB])
stackView.spacing = 20
stackView.axis = .horizontal
stackView.alignment = .center
stackView.distribution = .fillEqually
Вы также можете вкладывать представления стека для создания более сложных макетов.
Определенно стоит посмотретьв ...
https://developer.apple.com/documentation/uikit/uistackview?changes=_6
Создание макета
let upperStackView = UIStackView(arrangedSubviews: [topLeft, topRight])
upperStackView.axis = .horizontal
upperStackView.distribution = .fillEqually
upperStackView.spacing = 20
let lowerStackView = UIStackView(arrangedSubviews: [bottomLeft, bottomRight])
lowerStackView.axis = .horizontal
lowerStackView.distribution = .fillEqually
lowerStackView.spacing = 20
let mainStackView = UIStackView(arrangedSubviews: [upperStackView, lowerStackView])
mainStackView.axis = .vertical
mainStackView.distribution = .fillEqually
mainStackView.spacing = 20
view.addSubview(mainStackView)
NSLayoutConstraint.activate([
mainStackView.centerXAnchor.constraint(equalTo: view.centerXAnchor),
mainStackView.centerYAnchor.constraint(equalTo: view.centerYAnchor),
mainStackView.widthAnchor.constraint(equalToConstant: 200),
mainStackView.heightAnchor.constraint(equalToConstant: 200),
])
Почему не VFL?
В то время как VFL была хорошей первой попыткой AutoLayout, я чувствую, что Apple сейчас отошла от нее и движется к этим более кратким методам создания ограничений AutoLayout.
Это все еще позволяет вам думать вограничения при написании кода, но предоставляют немного более современный подход.
Конечно ... вы также можете создать UIStackView
в Интерфейсном Разработчике также: D