为啥 UIDimmingView 总是覆盖屏幕主要边界?

Posted

技术标签:

【中文标题】为啥 UIDimmingView 总是覆盖屏幕主要边界?【英文标题】:Why does UIDimmingView always cover screen main bounds?为什么 UIDimmingView 总是覆盖屏幕主要边界? 【发布时间】:2019-04-15 13:00:14 【问题描述】:

我正在尝试制作包含表格视图控制器和表格视图标题内的搜索控制器的底部滑块菜单。此时,我添加了表格视图控制器作为子视图控制器。搜索栏聚焦后,调光视图触发,但它覆盖了屏幕主要边界。我期望的是调光视图保持在子视图控制器边界内。我不明白为什么调光视图总是添加屏幕主边界?我有一个屏幕截图来演示我遇到的问题。

感谢您的帮助。

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

【问题讨论】:

你怎么知道它的UIDimmingView?我不明白的是,从您在此处发布的代码中,您还有其他可以帮助更多的代码吗? 嗨,我编辑了屏幕截图。你可以相信我,这是一个 UIDimmingView :) 【参考方案1】:

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

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

【讨论】:

所以,你是说无论我把搜索控件放在哪里,dimmingView 都会覆盖屏幕上所有呈现的视图控制器。

以上是关于为啥 UIDimmingView 总是覆盖屏幕主要边界?的主要内容,如果未能解决你的问题,请参考以下文章

C# - 为啥全屏 Winform 应用程序不总是覆盖任务栏?

为啥我的excel打字总是被下列覆盖,需要拉长列宽

为啥安全区域没有覆盖 iPad Pro 12.9" 上的屏幕宽度 [关闭]

为啥Android正常布局文件夹总是以横向模式打开屏幕

为啥word2010打开总是配置进度

iPhone界面为啥会覆盖