【问题标题】:UITableView Separator Style QuestionUITableView 分隔符样式问题
【发布时间】:2011-06-03 22:59:10
【问题描述】:

我有一个默认为空白的表格视图。用户可以向其中添加单元格。

我希望没有单元格时分隔线清晰,有单元格时为灰色。

我正在使用此代码:

if ([[self.fetchedResultsController fetchedObjects] count] == 0)
{
    self.routineTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    self.routineTableView.separatorColor = [UIColor clearColor];
}
else
{
    self.routineTableView.separatorColor = [UIColor grayColor];
}

问题是,当我使用空白表格启动应用程序时,如果我添加了单元格,在我重新启动应用程序之前,灰线不存在。但是,如果我从那里的单元格开始,然后删除它们,然后重新添加它们,那么线条就在那里。有什么建议吗?

【问题讨论】:

  • 这段代码在哪里被调用?是否在添加单元格之前调用它?
  • 它正在被viewDidLoad调用
  • 使用空白表格启动应用会遇到哪种情况?
  • if ([[self.fetchedResultsController fetchedObjects] count] == 0)

标签: iphone objective-c uitableview


【解决方案1】:

也许你错过了这个?

...
else
{
    self.routineTableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine; // or you have the previous 'None' style...
    self.routineTableView.separatorColor = [UIColor grayColor];
}

编辑: 你需要这个,但不仅仅是这个……根据 Apple 文档:

此属性的值是UITableViewCell Class Reference 类参考中描述的分隔符样式常量之一。 UITableView 使用此属性设置从tableView:cellForRowAtIndexPath: 中的委托返回的单元格的分隔符样式。

这意味着已经加载的单元格的样式不会改变。只需滚动表格以强制重绘单元格,就会出现分隔符...

然后你必须:

  1. 在插入单元格之前设置它

  2. 在添加第一个单元格时重新加载tableView

NSFetchedResultsController 不容易做到这一点,您应该查看它的delegate 以寻求解决方案...或改变方向,例如隐藏tableView 直到您可能得到结果...


EDIT 2:您也可以简单地添加:

[self.tableView reloadData];

但这是一个肮脏的解决方法,只会重新加载完整的 tableView,失去NSFetchedResultsController 的大部分好处...

【讨论】:

  • 用解释编辑了我的答案......以及一个应该可行的肮脏解决方法:)
  • 不幸的是 [self.routineTableView reloadData]; 也没有工作
  • 你设置separatorStyle = UITableViewCellSeparatorStyleSingleLine了吗?你的代码在哪个方法中?
  • 我已经添加了,正如你所建议的。如果 fetch 为零,也许我可以隐藏 tableview?你知道怎么做吗?
  • 无论如何这将是隐藏分隔符的最佳解决方案,您可以使用 self.routineTableView.hidden = YES;或在其上添加一个空白 UIView...
【解决方案2】:

我通常做的快速修复是:

#pragma mark - UITableViewDelegate

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {

    if ([tableView respondsToSelector:@selector(setSeparatorStyle:)]) {
        [tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
    }
}

【讨论】:

    【解决方案3】:

    这改变了是否有分隔符的布尔标志。把它放在 viewDidLoad 中:

    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    

    为了确保你真的让它消失了,请将 seperatorColor 属性设置为视图和单元格的背景颜色:

    // If the background is white
    self.tableView.separatorColor = [UIColor whiteColor];
    

    那么即使上面的代码没有被调用并且分隔符仍然存在 - 它会与它后面的颜色相同,因此是不可见的。

    祝你好运。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 2013-12-04
      • 2017-07-06
      • 2011-04-15
      相关资源
      最近更新 更多