UITableView子视图不包含UITableViewWrapperView iOS 11

时间:2017-11-06 09:49:30

标签: ios objective-c swift uitableview ios11

我在Storyboard中创建了UITableView,其中包含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) } }

subViews

问题:我遇到UITableView tableView.subviews的问题。

在iOS-10 中,执行UITableViewWrapperView时,我将UITableViewWrapperView作为其中一个元素以及数组中的其他元素。

但iOS-11中的 tableView.subviews返回的数组中没有hitTest:withEvent:

因此,我在UITableView上覆盖for i in range(0, 7): Grid.columnconfigure(self.labelF,index=i, weight=1) Label(self.labelF, text="Measurement ID", anchor=W, width=0).grid(row=0, column=0, sticky=W+E) Label(self.labelF, text="Sample ID", anchor=W, width=0).grid(row=0, column=1, sticky=W+E) Label(self.labelF, text="Meat Type", anchor=W, width=0).grid(row=0, column=2, sticky=W+E) Label(self.labelF, text="Time", anchor=W, width=0).grid(row=0, column=3, sticky=W+E) Label(self.labelF, text="Temperature", anchor=W, width=0).grid(row=0, column=4, sticky=W+E) Label(self.labelF, text="Measurement", anchor=W, width=0).grid(row=0, column=5, sticky=W+E) Label(self.labelF, text="Comment", anchor=W, width=0).grid(row=0, column=6, sticky=W+E) 时遇到问题。

1 个答案:

答案 0 :(得分:2)

iOS-11 中,Apple已从UITableViewWrapperView层次结构中删除了table view,已在链接中确认:https://forums.developer.apple.com/thread/82320

我遇到hitTest:withEvent:的问题,因为它早先应用于tableView.subviews.first,即UITableViewWrapperView

现在,我在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
    }
}

终于搞定了。