Почему UIDimmingView всегда перекрывает основные границы экрана?

#ios #swift #uisearchcontroller

#iOS #swift #uisearchcontroller

Вопрос:

Я пытаюсь создать нижнее меню слайдера, содержащее контроллер представления таблицы и контроллер поиска внутри заголовка представления таблицы. На этом этапе я добавил контроллер представления таблицы в качестве дочернего контроллера представления. После фокусировки панели поиска срабатывает режим затемнения, но он перекрывает основную границу экрана. Я ожидаю, что затемняющий вид останется внутри границ дочернего контроллера представления. Я не мог понять причину, по которой затемнение просмотра всегда добавляло основные границы экрана? У меня есть снимок экрана, чтобы продемонстрировать проблему, с которой я столкнулся.

Спасибо за вашу помощь.

 class ChildTableViewController: UITableViewController {

    lazy var searchController: UISearchController = {
        let temp = UISearchController(searchResultsController: resultSearchController)
        temp.dimsBackgroundDuringPresentation = true
        return temp
    }()

    private var resultSearchController = ResultSearchTableViewController(style: .plain)

    override func viewDidLoad() {
        super.viewDidLoad()

        prepareViewController()
    }

    func prepareViewController() {
        self.tableView = UITableView(frame: .zero, style: .plain)
        self.tableView.separatorStyle = .singleLine
        self.tableView.register(ChildTableViewCell.self, forCellReuseIdentifier: ChildTableViewCell.identifier)
        self.tableView.tableHeaderView = searchController.searchBar

        self.definesPresentationContext = true
    }

}
  

Снимок экрана

Комментарии:

1. Откуда вы его знаете UIDimmingView ? Я не могу понять, что из кода, который вы опубликовали здесь, есть ли у вас какой-либо другой код для просмотра, который может помочь больше?

2. Привет, я отредактировал снимок экрана. Вы можете мне поверить, это UIDimmingView 🙂

Ответ №1:

Даже если его содержимое отображается в контексте дочернего контроллера представления, сам контроллер поиска является представленным контроллером представления и предотвращает взаимодействие с любым другим интерфейсом. Таким образом, имеет смысл, что если вы запрашиваете режим затемнения, режим затемнения охватывает все, кроме интерфейса контроллера поиска. Если вам это не нравится, установите obscuresBackgroundDuringPresentation значение false .

(Вы не должны использовать dimsBackgroundDuringPresentation . Используйте obscuresBackgroundDuringPresentation вместо этого.)

Комментарии:

1. Итак, вы говорите, что везде, где я устанавливаю управление поиском, dimmingView охватывает все представленные контроллеры просмотра на экране.