我最近在iOS 11中测试了我的应用程序,出于某种原因,我无法在动态填充的表视图中选择前12行中的一行。对于这些行,甚至没有触发didSelectRow。其他行可以正常工作,但即使向下滚动和向上滚动(到那时应该再次使用单元格),前12行也不能工作。
即使在静态表视图上,切换到该视图控制器时显示在屏幕上的所有单元格也不会响应,即使它们位于不同的部分,它们内部的控件也不会响应。从一开始,屏幕外的单元格也可以正常工作。
我将尝试在一个带有样板代码的应用程序中测试这个问题,但这是一个已知的错误吗?我在网上找不到任何关于它的信息。
我在将设备更新到iOS 11之后,然后再次从Xcode 9 beta 6中进行测试,没有对代码进行更改,在迁移到Swift 4之后又进行了测试。模拟器内部也是如此。直到iOS 10,一切都很好,只有iOS 11才会出现问题。
这将打破我的应用程序在两周内,我需要修复它,所以任何帮助或建议非常感谢!
更新:正如建议的那样,确实有另一个视图阻塞了行。这是值得注意的,因为第12行只能在单元格的下部选择,而不能在上半部分选择。
造成此问题的原因是以下代码:
extension UIViewController {
func setBackgroundImage(forTableView tableView: UITableView) {
let bgImage = UIImage(named: "Background Image.png")
let bgImageView = UIImageView(image: bgImage)
tableView.backgroundView = bgImageView
let rect = bgImageView.bounds
let effect = UIBlurEffect(style: UIBlurEffectStyle.dark)
let blurView = UIVisualEffectView(effect: effect)
let height: CGFloat
switch screenSize.height {
case 480, 568: height = 455
case 736: height = 623
default: height = 554
}
blurView.frame = CGRect(x: 0, y: 0, width: rect.width, height: height)
let container = UIView(frame: rect)
bgImageView.addSubview(blurView)
let bgOverlay = UIImage(named: "Background Overlay.png")
let bgOverlayImageView = UIImageView(image: bgOverlay)
bgOverlayImageView.alpha = 0.15
bgImageView.addSubview(bgOverlayImageView)
self.view.insertSubview(container, at: 1)
}
}由于iOS 11,这个背景图像似乎呈现在细胞的前面。不将容器视图插入表视图将解决此问题。我尝试过设置容器层的zPosition,但没有帮助。如何再次移动细胞后面的背景图像。奇怪的是,这种行为会从iOS 10变成11.
更新2:在索引-1处插入容器的修复了以下问题:
self.view.insertSubview(container, at: -1)
但我不明白为什么这个指数不应该超出范围吗?
更新3:就像Paulw11在下面指出的那样,容器是完全无用的,它是在测试和删除之后遗留下来的,解决了这个问题。
发布于 2017-08-27 09:34:02
container视图似乎出现在其他视图的前面,并阻止了对表视图的触摸。
顺便说一句,我想看看您是否可以重构它以使用约束;当您看到硬编码的屏幕大小时,它总是让我担心,因为当新设备发布时,它可能会中断。
https://stackoverflow.com/questions/45902657
复制相似问题