UITableViewWrapperView

UITableViewWrapperView

我在UIViewController中创建了一个包含StoryboardUITableView

class ViewController: UIViewController, UITableViewDataSource
{
    @IBOutlet weak var tableView: UITableView!

    override func viewDidLoad()
    {
        super.viewDidLoad()
    }

    override func viewDidAppear(_ animated: Bool)
    {
        super.viewDidAppear(animated)
        print(self.tableView.subviews) //HERE..!!!
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {
        return 5
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {
        return tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
    }
}

问题:我面临着subViewsUITableView问题。
在iOS-10中,当执行tableView.subviews时,我将UITableViewWrapperView作为数组中的一个元素以及其他元素。
但在iOS-11中,UITableViewWrapperViewtableView.subviews返回的数组中不可用。
正因为如此,我面临着我在hitTest:withEvent:上重写的UITableView的问题。

最佳答案

在iOS-11中,苹果从UITableViewWrapperView层次中删除了table view,这在链接中得到了确认:https://forums.developer.apple.com/thread/82320
我正面临着hitTest:withEvent:的问题,因为它早先应用于tableView.subviews.firstUITableViewWrapperView
现在,我将hitTest应用于UITableView本身,而不是它的wrapper view,即。

class TableView: UITableView
{
    override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView?
    {
        if let hitView = super.hitTest(point, with: event) , hitView != self
        {
            return hitView
        }
        return nil
    }
}

终于成功了。

08-19 12:05