Добавить segmented control к navbar через код (swift)

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

SegmentedControl наподобие такого, только еще с searchBar: введите сюда описание изображения


Ответы (1 шт):

Автор решения: Denis Shchigolev

Данный вариант возможно реализовать с помощью констрейнтов. segmentedControl будет видимым даже при скрытом searchBar. segmentedControl со скрытым searchBar

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)
        ])
    }
→ Ссылка