iOS 7 UITableView:是错误还是我?
Posted
技术标签:
【中文标题】iOS 7 UITableView:是错误还是我?【英文标题】:iOS 7 UITableView: is it a bug or is it me? 【发布时间】:2014-03-22 01:09:05 【问题描述】:请看附图。在 ios 7 的表格视图中,UIKit 在附件视图和重新排序控件之间绘制了一条细的灰色垂直线。但是,当滚动表格视图时,这条线不会在某些单元格中绘制。附图中的单元格 1、2 和 8 中不存在它。为什么是这样?我该如何解决?
【问题讨论】:
所以你没有画这条线?这不是你的cellForRow...
实现中的东西吗?
我想我要问的是:您能否在与您的应用程序无关的普通香草最小项目中重现此问题?如果是这样,这听起来像是一个 iOS 7 错误。但如果不是,那么这就是你正在做的事情。 :)
是的,我可以通过简单地将以下代码修改为样板 UITableViewController
代码来重现这一点,以有条件地在某些单元格上显示editingAccessoryType。像cell.editingAccessoryType = (indexPath.row % 2 ? UITableViewCellAccessoryDisclosureIndicator : UITableViewCellAccessoryNone
这样的东西。当单元格在与以前不同的行中重用时,UIKit 似乎没有正确更新垂直线装饰。提交错误。
好消息;我可以用同样的方式重现。
我向 Apple 提交了一份错误报告,但它以副本的形式返回。所以,他们可能不会修复它,但他们确实知道。
【参考方案1】:
我在 iphone 6s plus 上遇到了同样的问题,并将单元格的 textLabel 的 backgroundColor 设置为 clearColor 解决了它
cell.textLabel.backgroundColor = [UIColor clearColor];
查看reveal 的问题告诉我,标签的右边框正在绘制这条垂直线。
【讨论】:
这对我有用,但我也发现我可以在 Interface Builder 中将单元格背景颜色设置为清除。【参考方案2】:你可以试试这个
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath;
cell.backgroundColor=[UIColor clearColor];
cell.backgroundView=nil;
此方法可能会有所帮助,或者可能在您的单元格中,例如某些图像或什么。 或者您可以检查使用这样的单元格分配 将 if(cell==nil) 替换为 if(1) and alloc cell eveytime
【讨论】:
【参考方案3】:我遇到了同样的问题并设法找到了解决方法。当表格视图处于编辑模式并且将在表格视图处于非编辑模式时排队的单元格出列时,问题似乎发生了。解决方法是在出列后立即将单元格的编辑属性设置为 NO。 在您返回 tableView:cellForRowAtIndexPath: 中的单元格后,表格视图会自行将此属性设置回 YES。
cell = [tableView dequeueReusableCellWithIdentifier:cellReuseIdentifier forIndexPath:indexPath];
cell.editing = NO;
【讨论】:
【参考方案4】:这适用于 Swift 2.1。在 iOS 9.2.1 上。在 XCode 7.2 中: 我在 iPhone 6s 上测试了代码,而在 4" 设备上没有出现分隔符。
我已经创建了UITableViewCell
的子类
在required init(coder aDecoder: NSCoder)
里面我做了这个:
required init(coder aDecoder: NSCoder)
super.init(coder: aDecoder)!
self.textLabel?.backgroundColor = UIColor.clearColor()
您可能会发现需要在override func drawRect(rect: CGRect)
中设置背景颜色,因为此解决方案仅适用于界面生成器创建的单元格。
该解决方案适用于开发和模拟器。
【讨论】:
以上是关于iOS 7 UITableView:是错误还是我?的主要内容,如果未能解决你的问题,请参考以下文章
UITableView 在 iOS 7 中工作,但在 iOS 8 中看起来很糟糕