Добавить segmented control к navbar через код (swift)
Есть ли возможность добавить SegmentedControl в NavigationBar под searchBar через код? (приложение без storybord’a)? Вариант scopeButton не подходит, т.к. SegmentedControl нужен для постоянного отображения, titleView и tableHeaderView тоже не подходят
SegmentedControl наподобие такого, только еще с searchBar:

Ответы (1 шт):
Автор решения: Denis Shchigolev
→ Ссылка
Данный вариант возможно реализовать с помощью констрейнтов.
segmentedControl будет видимым даже при скрытом searchBar.

private func setup() {
view.backgroundColor = .myWhiteColor()
//скрываем тень navigationBar
guard let appearance = navigationController?.navigationBar.standardAppearance else { return }
appearance.shadowImage = UIImage()
appearance.shadowColor = .clear
navigationController?.navigationBar.standardAppearance = appearance
//любая View
let newView = UISegmentedControl(first: "Новые", second: "Активные", selectedIndex: 0)
newView.backgroundColor = .systemBackground
//при желании можно так же добавить тень к segmentedControl
newView.layer.shadowColor = UIColor.systemGray6.cgColor
newView.layer.shadowOffset = CGSize(width: 0,
height: 0.5)
newView.layer.shadowRadius = CGFloat(0.5)
guard let collectionView = collectionView else { return }
//добавляем collectionView первым (либо любой другой элемент с scrollView, для того, что бы searchBar корректно скрывался при скролле)
view.addSubview(collectionView)
view.addSubview(newView)
newView.translatesAutoresizingMaskIntoConstraints = false
collectionView.translatesAutoresizingMaskIntoConstraints = false
let guide = self.view.safeAreaLayoutGuide
NSLayoutConstraint.activate([
//устанавливаем констрейнты к top safeArea для segmentedControl
newView.trailingAnchor.constraint(equalTo: guide.trailingAnchor, constant: -25),
newView.leadingAnchor.constraint(equalTo: guide.leadingAnchor, constant: 25),
newView.topAnchor.constraint(equalTo: guide.topAnchor),
newView.heightAnchor.constraint(equalToConstant: 25),
//устанавливаем констрейнты к bottom segmentedControl для collectionView
collectionView.trailingAnchor.constraint(equalTo: guide.trailingAnchor),
collectionView.leadingAnchor.constraint(equalTo: guide.leadingAnchor),
collectionView.topAnchor.constraint(equalTo: newView.bottomAnchor),
collectionView.bottomAnchor.constraint(equalTo: guide.bottomAnchor)
])
}
