虽然我尝试在 UIWindow 内的 UITableViewCell 中转换 subview 的坐标,但它给出的结果没有添加 UINavigationBar 的高度,就好像它位于屏幕顶部,但它位于 UINavigationController 内部。也许我做错了什么。
open var targetView: UIView? {
didSet {
if let tView = targetView {
targetFrame = self.convert(self.frame, to: tView)
}
}
}
self是UITableViewCell里面的子view,targetView是UIApplication.shared.keyWindow
最佳答案
我创建了一个最简单的应用程序来测试它,它运行良好。您可能错过了对 superview
的调用,尽管导航栏高度的确切差异看起来很奇怪。无论如何尝试:
targetFrame = self.superView!.convert(self.frame, to: tView) // TODO: remove the force-unwrap
我使用的是导航栏中带有委托(delegate)方法的表格 View :
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let view = tableView.cellForRow(at: indexPath)
// let view = tableView.cellForRow(at: indexPath)?.textLabel // Also works
let parent = UIApplication.shared.keyWindow
let converted = view?.superview?.convert(view!.frame, to: parent)
print("\(converted)")
}
打印的值确实包括导航栏。
关于ios - UIView.convert 在计算 UIWindow 中的 UITableViewCell subview 时给出错误的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41280331/