let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
label.text = "Hello, World!"
label.font = UIFont.systemFont(ofSize: 16, weight: .medium)
label.textColor = .darkText
view.addSubview(label)
NSLayoutConstraint.activate([
label.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 16),
label.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20),
label.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20)
])
class CustomButton: UIButton {
override init(frame: CGRect) {
super.init(frame: frame)
setupView()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private func setupView() {
backgroundColor = .systemBlue
layer.cornerRadius = 8
setTitleColor(.white, for: .normal)
}
}
Контроль версий:
Переиспользование кода:
Динамическая генерация:
Стабильность:
Производительность:
Визуализация:
Время разработки:
Инструменты:
Обучаемость:
label.snp.makeConstraints { make in
make.top.equalTo(view.safeAreaLayoutGuide).offset(16)
make.leading.trailing.equalToSuperview().inset(20)
}
let stackView = UIStackView(arrangedSubviews: [label, button])
stackView.axis = .vertical
stackView.spacing = 8
extension UIView {
func padding(_ insets: UIEdgeInsets) -> UIView {
let container = UIView()
container.addSubview(self)
// Настройка constraints с inset'ами
return container
}
}
extension UILabel {
static func create(text: String, style: UIFont.TextStyle) -> UILabel {
let label = UILabel()
label.font = UIFont.preferredFont(forTextStyle: style)
label.numberOfLines = 0
return label
}
}
enum ViewFactory {
static func makeButton(title: String) -> UIButton {
let button = UIButton(type: .system)
button.setTitle(title, for: .normal)
// Дополнительная настройка
return button
}
}
struct ViewState {
let title: String
let isEnabled: Bool
}
func updateViews(with state: ViewState) {
label.text = state.title
button.isEnabled = state.isEnabled
}
Верстка UI в коде дает полный контроль над интерфейсом и идеально подходит для больших проектов с командной разработкой, но требует больше времени и навыков. Storyboards/XIB лучше использовать для прототипирования или небольших проектов. Современные инструменты типа SnapKit значительно упрощают жизнь при верстке кодом.