为什么UIDimmingView总是覆盖屏幕的主要边界?

时间:2019-04-15 13:00:15

标签: 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
    }

}

Screen shot

1 个答案:

答案 0 :(得分:0)

即使其内容出现在子视图控制器上下文上,搜索控制器本身也是呈现的视图控制器,并阻止与任何其他界面的交互。因此,有意义的是,如果您要求调光视图,则调光视图涵盖了搜索控制器界面以外的所有内容。如果您不喜欢,请将obscuresBackgroundDuringPresentation设置为false

(您不应该使用dimsBackgroundDuringPresentation。请使用obscuresBackgroundDuringPresentation。)