Xcode 12 和 iOS 14 中的手势问题
Problem with gesture in Xcode 12 and iOS 14
升级到 Xcode 12 和 iOS 14 后出现问题。
场景:
我有一个嵌套的 UITableView:nestedTableView。喜欢下面
class GAllowGestureEventPassTableView: UITableView, UIGestureRecognizerDelegate {
var allowGestureEventPassViews: [UIView] = []
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
panGestureRecognizer.cancelsTouchesInView = false
guard let otherView = otherGestureRecognizer.view else { return false }
print("tableView : \(type(of: otherView))")
if allowGestureEventPassViews.contains(otherView) {
print("allowGestureEventPassViews contains : \(type(of: otherView))")
print("gesture pass ")
return true
} else {
return false
}
}
}
然后我将另一个 UITableView 添加到 nestedTableView 的 allowGestureEventPassViews 数组。这样我就可以控制哪个tableView可以滚动了。
self.nestedTableView.allowGestureEventPassViews.append(controller.tableView)
在 Xcode 11.7 中,iOS 14 工作正常。
日志:
tableView : GAllowGestureEventPassTableView
tableView : GAllowGestureEventPassTableView
tableView : GAllowGestureEventPassTableView
tableView : UITableView
allowGestureEventPassViews contains : UITableView
gesture pass
但升级到Xcode 12 手势后,感觉不一样了。
在 Xcode 12 中,手势永远不会通过 nestedTableView。
tableView : GAllowGestureEventPassTableView
tableView : GAllowGestureEventPassTableView
tableView : GAllowGestureEventPassTableView
tableView : UITableViewCellContentView
有没有人遇到同样的问题?或者我对 iOS14 手势有一些误解。
我找到了答案。
由于iOS14某些原因,UITableViewCellContentView层次结构不同。
在tableView(_:cellForRowAt:)中添加子视图
cell.addSubview(contentScollView)
UITableViewCellContentView 正在阻止手势。
改为
cell.contentView.addSubview(contentScollView)
这解决了我的问题。
在Objective C中:
[self.contentView addSubview: contentScollView];
升级到 Xcode 12 和 iOS 14 后出现问题。
场景: 我有一个嵌套的 UITableView:nestedTableView。喜欢下面
class GAllowGestureEventPassTableView: UITableView, UIGestureRecognizerDelegate {
var allowGestureEventPassViews: [UIView] = []
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
panGestureRecognizer.cancelsTouchesInView = false
guard let otherView = otherGestureRecognizer.view else { return false }
print("tableView : \(type(of: otherView))")
if allowGestureEventPassViews.contains(otherView) {
print("allowGestureEventPassViews contains : \(type(of: otherView))")
print("gesture pass ")
return true
} else {
return false
}
}
}
然后我将另一个 UITableView 添加到 nestedTableView 的 allowGestureEventPassViews 数组。这样我就可以控制哪个tableView可以滚动了。
self.nestedTableView.allowGestureEventPassViews.append(controller.tableView)
在 Xcode 11.7 中,iOS 14 工作正常。
日志:
tableView : GAllowGestureEventPassTableView
tableView : GAllowGestureEventPassTableView
tableView : GAllowGestureEventPassTableView
tableView : UITableView
allowGestureEventPassViews contains : UITableView
gesture pass
但升级到Xcode 12 手势后,感觉不一样了。 在 Xcode 12 中,手势永远不会通过 nestedTableView。
tableView : GAllowGestureEventPassTableView
tableView : GAllowGestureEventPassTableView
tableView : GAllowGestureEventPassTableView
tableView : UITableViewCellContentView
有没有人遇到同样的问题?或者我对 iOS14 手势有一些误解。
我找到了答案。
由于iOS14某些原因,UITableViewCellContentView层次结构不同。
在tableView(_:cellForRowAt:)中添加子视图
cell.addSubview(contentScollView)
UITableViewCellContentView 正在阻止手势。
改为
cell.contentView.addSubview(contentScollView)
这解决了我的问题。
在Objective C中:
[self.contentView addSubview: contentScollView];