我已经构建了一个包含带有一组单元格的UITableView的应用程序。在单元格内部,我有一个视图,该视图填充了整个单元格。我已经像这样配置了tableview:
tableView.separatorStyle = .none
tableView.backgroundColor = UIColor(red: 24/255.0, green: 34/255.0, blue: 41/255.0, alpha: 100)
tableView.separatorColor = UIColor(red: 26/255.0, green: 34/255.0, blue: 40/255.0, alpha: 100)
每当应用程序进入前台时,我都会看到这些细线闪烁0.5秒左右。明确一点,我不要那些。
这是应用程序完全进入前台时的外观,以及它的外观:
任何想法如何摆脱它们?
编辑1:
我开始怀疑闪烁与分隔符有关,因为它仅发生在部分中的单元格之间,而不发生在部分单元格和部分中的第一个单元格之间。我已经抓取了一些视图层次结构的屏幕快照以及与在单元格中显示的视图(前景视图)相关的约束。
编辑2:
如果将顶部和底部约束设置为-2而不是0,则根本没有闪烁,但是并不是我想要的。因此,闪烁根本与分隔符无关。
答案 0 :(得分:2)
删除单元格分隔符的技巧。
Objective-C
- (void)viewDidLoad {
[super viewDidLoad];
self.tableView.tableFooterView = [UIView new];
}
迅速
override func viewDidLoad() {
super.viewDidLoad()
tableView.tableFooterView = UIView()
}
答案 1 :(得分:1)
当您返回错误的heightForRowAtIndexPath时,通常会发生闪烁。
就您而言,您返回的位置要比单元格的实际高度小一些。
因此,请尝试将单元格的“ clipToBounds”设置为“ true”,然后检查其是否有效。
答案 2 :(得分:1)
请尝试在info.plist中将“具有边缘抗锯齿效果的渲染”设置为“是”。
答案 3 :(得分:1)
我认为这是您的UITableViewStyle
问题。目前,您正在使用UITableViewStyle
Grouped
。因此,单元格之间的行不是UITableViewCellSeparator
,而是Group Table 1像素页眉和页脚空间。所以,
我有两种解决方法:
UITableView
背景颜色与单元格背景颜色相同。UITableView
的样式更改为Plain
GroupTable SS
或
普通表SS
希望它能对您有所帮助。并解决您的问题:)
答案 4 :(得分:1)
我认为它与分隔符无关,因为分隔符不能覆盖整个屏幕,它必须与您的约束有关,请尝试更改BackgroundContainerView
,DepartureCell
的背景颜色和TableView
,这3个视图之一应具有深灰色作为背景色。
答案 5 :(得分:1)
是否可以从另一个视图继承表视图,并且可以在超类中将 seperatorStyle 设置为不同?然后,您需要覆盖它。
答案 6 :(得分:0)
尝试设置具有完全透明性的tableview分隔符颜色
tableView.separatorColor = UIColor(red: 26/255.0, green: 34/255.0, blue: 40/255.0, alpha: 0)
在viewWillAppear中执行此操作
如果这样不能帮助检查视图层次结构,则可能是
中的单元格渲染存在问题func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath)
选中此post及其快速更新4
或尝试将此扩展添加到您的ViewController
extension UITableViewCell {
func removeCellSeparators() {
for subview in subviews {
if subview != contentView && subview.frame.width == frame.width {
subview.removeFromSuperview()
}
}
}
}
然后尝试在返回单元格之前调用它
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "YourCellIdentifier", for: indexPath)
cell.removeSeparators()
return cell
}
如果这没有帮助,请发布更多有关您的设置,代码的信息,或者使用gitHub上存在问题的tableView托管您的应用程序的最低版本,以便我提供帮助。
编辑1:
如果要解决您的问题,请尝试将rowHeight / cellHeight设置为比当前值高15像素,而不是cellHeight需要调整的地方可能是它只需要高2-4像素即可。可能是因为应用程序进入前景时,自动布局正在尝试做它可以显示的所有内容,但是有些约束是模棱两可的,因此从背景进入时,视图会在系统中显示动画,大约半秒钟,并且您的闪烁也是如此。
答案 7 :(得分:0)
在viewDidLoad()中设置
tableView.separatorStyle = .none
答案 8 :(得分:0)
答案 9 :(得分:0)
如果您设置
tableView.separatorStyle = .none
在viewDidLoad()
上,它将闪烁
您需要先完成操作,例如在viewWillAppear()
或情节提要中
答案 10 :(得分:0)
您是否可以使用Xcode“调试视图层次结构”查找问题视图,并使用“ KVC”删除该视图。 ps。我的英语不好,希望我能帮到你
答案 11 :(得分:0)
答案 12 :(得分:0)
使tableView
的{{1}}和backgroundColor
与以下内容完全相同:
separatorColor