сбросить UIView, когда UISearchController сфокусирован - PullRequest
0 голосов
/ 02 июля 2018

У меня проблема с тем, что я вижу черную часть в моем UIViewController, где у меня есть UISearchController, UICollectionView и UISegmentControl из-за моего плохого дизайна.
Я добавил UISearchController в navigationbar, используя следующий код:

func setupSearchBar(){

        navigationItem.searchController = taskSearchController
        taskSearchController.searchBar.tintColor = .white
        UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes = [NSAttributedStringKey.foregroundColor.rawValue: UIColor.lightGray]

        UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).attributedPlaceholder = NSAttributedString(string: "Search Text", attributes: [NSAttributedStringKey.foregroundColor: UIColor.lightGray])

        if let textfield = taskSearchController.searchBar.value(forKey: "searchField") as? UITextField {
            if let backgroundview = textfield.subviews.first {
                backgroundview.backgroundColor = UIColor.init(white: 1, alpha: 1)
                backgroundview.layer.cornerRadius = 10
                backgroundview.clipsToBounds = true
            }
        }
        taskSearchController.hidesNavigationBarDuringPresentation = true
        //navigationItem.hidesSearchBarWhenScrolling = false
        //taskSearchController.searchBar.scopeButtonTitles = ["ASSIGNED TASK","CREATED TASK"]
    }

после добавления UISearchController Я добавляю UISegmentControl и UICollectionView, используя следующий код:

func setupView(){
        //self.view.addSubview(coverView)
        self.view.addSubview(taskSegment)

    taskSegment.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
    taskSegment.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
    taskSegment.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
    taskSegment.heightAnchor.constraint(equalToConstant: 30).isActive = true

    self.view.addSubview(collectionView)
    collectionView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true
    collectionView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true
    collectionView.topAnchor.constraint(equalTo: taskSegment.bottomAnchor, constant: 10).isActive = true
    collectionView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: 5).isActive = true

}

Это мой первоначальный взгляд Task Screen что хорошо.

Вот как это выглядит, когда UISearchController сфокусировано Task Screen with black part

Здесь вы можете видеть, когда navigationBar прячется и UISearchController помещается на вершине в это время, мои UISegment и UIcollectionView остаются в том же положении, поэтому я хочу переместить его в соответствии с изменением в UISearchController.

Может кто-нибудь сказать мне, что мне делать?

Заранее спасибо.

1 Ответ

0 голосов
/ 05 июля 2018

Скрывает панель навигации, потому что hideNavigationBarDuringPresentation имеет значение true. Это предполагаемое поведение.

Вам нужно либо отключить это, чтобы ограничения вида не изменялись во время презентации, либо вам нужно изменить свои ограничения, чтобы представление адаптировалось к изменению высоты панели навигации. Вы должны быть в состоянии сделать это довольно легко, установив верхнее ограничение на безопасную область основного вида.

...