【问题标题】:UITableView grouped hide section separatorUITableView 分组隐藏部分分隔符
【发布时间】:2015-11-05 01:51:19
【问题描述】:

我知道以前有人问过这个问题。但互联网上没有人给出有效且充分的答案。

编辑显然人们不再阅读问题了,关于 SO。所以我想澄清一下:我想删除分隔符。分隔符既不是节上方的空格,也不是 tableViewHeader 或 tableViewFooterView。它只是上面的细线(完全从左到右)。

我有一个分组UITableView(由于许多其他原因我不想使用普通样式,就这样吧)它有多个组。

第一部分的顶部不应有分隔线。设置 tableView 的分隔符样式不是一个选项,因为我确实需要其他分隔符。

设置 tableViews tableFooterView 是我经常阅读的内容,但从未奏效。

我之前使用了带有静态内容的 tableView,我可以使用以下方法删除 -[UITableViewController viewDidLoad] 中的分隔符:

- (void)viewDidLoad {
    [[[self headerTableCell] valueForKey:@"_topSeparatorView"] removeFromSuperView];
}

由于我现在必须将 tableView 更改为动态的,IBOutlet 属性将不再起作用(显然)。

所以我尝试了所有方法,-[id tableView:willDisplayCell:atIndexPath:]-[UITableViewCell initWithStyle:reuseIdentifier:prepareForReuseawakeFromNib] 等等。

在任何情况下,这个分隔符都是 nil。所以我需要一个在设置单元格的完整视图层次结构时调用的方法。

【问题讨论】:

  • 截图可以带你走很长的路;)
  • 自 2015 年以来,您是否偶然找到了答案?我在atm面临同样的问题。
  • 不可能。
  • @iur 我最终实现了基于自定义视图的单元格。
  • 感谢您的回复。就我而言,我不得不同意保留它们:(

标签: ios objective-c iphone uitableview


【解决方案1】:

我从您的情况中得到什么,您有一个分组的 UITableView,您希望第一部分没有分隔符,并且您希望将分隔符保留在其他部分中,所以 从 属性检查器中从整个 tableview 中删除分隔符 使 Separator : None 在情节提要中为其他部分创建自定义 UITableviewCell 并在其末尾添加 View,高度为 1,宽度为整个屏幕(如默认分隔符) 这可能不是最好的主意,但这将使您的第一部分没有分隔符

【讨论】:

    【解决方案2】:

    我遇到了类似的问题,想删除分组表视图中该部分的最后一行,我在视图中调用以下方法将出现并在每个表重新加载时出现。这不是确切的答案,但只需更改虚拟视图的 y 值即可解决问题。

    +(void)removeLastSectionSeparatorForTableView:(UITableView *)tableView
    {
        UIView *oldSeparatorView = [tableView viewWithTag:kTagDummySectionSeparator];
    
        if (oldSeparatorView != nil)
        {
            [oldSeparatorView removeFromSuperview];
        }
    
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(),
                       ^{
    
                           UIView *view = [[UIView alloc] init];
                           view.tag = kTagDummySectionSeparator;
                           view.backgroundColor = [UIColor colorWithRed:239.0/255 green:239.0/255 blue:244.0/255 alpha:1.0];//Group table background color
                           view.frame = CGRectMake(0,
                                                   tableView.contentSize.height-40,
                                                   tableView.bounds.size.width,
                                                   2);
                           [tableView addSubview:view];
                       });
    }
    

    【讨论】:

      【解决方案3】:

      也许这个问题和我之前的一样。 最后,我解决这个问题的方法:设置表视图delegate的方法(CGFloat)tableView:(UITableView *)tableView heightForHeaderAtSection:(NSInteger)section,然后return CGFLOAT_MIN;

      【讨论】:

        【解决方案4】:

        在您的自定义单元类中添加此覆盖函数

           override func layoutSubviews() {
            super.layoutSubviews()
            for subview in subviews where (subview != contentView && abs(subview.frame.width - frame.width) <= 0.1 && subview.frame.height < 2) {
                subview.removeFromSuperview()
            }
         }
        

        【讨论】:

        • 嘿伊姆兰,感谢您的回答。已经 6 年了......我需要重新创建这个问题,但听起来像是一个可行的解决方案。
        • 我看到的唯一问题是单元重用。您删除了一个子视图,因此如果该单元格在另一个部分中重复使用,它就不会存在。我想我最终一起创建了一个自定义视图,但当时有点不同;-)