【问题标题】:How to remove first cell top separator and last cell bottom separator如何移除第一个单元格顶部分隔符和最后一个单元格底部分隔符
【发布时间】:2015-12-16 14:14:33
【问题描述】:

我需要删除特定部分中第一个单元格的顶部边框和特定部分中最后一个单元格的底部边框。

我搜索了从 tableView 中完全隐藏分隔符的解决方案,但我想避免它。

当您收到事件时,当单元格将显示以使用分隔符插入时,我也找到了解决方案。它适用于两个单元格之间的中间分隔符,但不适用于页眉/页脚和单元格之间的分隔符。

另外我尝试在标题中查看子图层,但由于此视图是我自己创建的,因此我没有找到分隔视图。

也许我应该在标题中使用图层?请给我一个线索。

【问题讨论】:

  • 你找到这个安东的解决方案了吗?

标签: ios objective-c uitableview separator


【解决方案1】:

在你的ViewDiDLoad

   - (void)viewDidLoad {
[super viewDidLoad];
yourTableview.tableFooterView=[[UITableView alloc]initWithFrame:CGRectZero];

}


- (UIEdgeInsets)layoutMargins
{
return UIEdgeInsetsZero;
}

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
if ([tableView respondsToSelector:@selector(setSeparatorInset:)]) {
    [tableView setSeparatorInset:UIEdgeInsetsZero];
}

if ([tableView respondsToSelector:@selector(setLayoutMargins:)]) {
    [tableView setLayoutMargins:UIEdgeInsetsZero];
}

if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
    [cell setLayoutMargins:UIEdgeInsetsZero];
}


if ( indexPath.row ==  tableData.count-2 ) {


    cell.separatorInset = UIEdgeInsetsMake(0, 0, 0, CGRectGetWidth(tableView.bounds));

}

else  {

   // do nothing

}

}

最终的输出是

【讨论】:

    【解决方案2】:
    - (void)layoutSubviews {
        [super layoutSubviews];
    
        for (UIView *subview in self.contentView.superview.subviews) {
            if ([NSStringFromClass(subview.class) hasSuffix:@"SeparatorView"] && subview.frame.origin.x == 0 ) {
                subview.hidden = YES;
            }else
            {
                subview.hidden = NO;
            }
        }
    }
    

    【讨论】:

    • 我实际上不会使用这种方法,因为它依赖于 UIKit 中的内部类名。
    【解决方案3】:

    下面的代码帮助我从 UITableView 的最后一行删除分隔符。

    斯威夫特 3.0

    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
            if indexPath.row == tableView.numberOfRows(inSection: indexPath.section) {
                cell.separatorInset.left = cell.bounds.size.width
            }
        }
    

    【讨论】:

      【解决方案4】:

      对我来说,事实证明,所有这些视图黑客攻击都比创建自己的 UITableViewCell 子类要复杂得多,在子类中将 1p 高的 UIView 作为自己的分隔符并将其隐藏在 cellForRowAtIndexPath: 中indexPath 是该部分的最后一行。

      一旦您了解了如何创建自定义 UITableViewCells,这实际上是一项非常简单的工作。此外,它比破解 Apple 的设计更安全且面向未来。它们为您提供适合整体系统风格的分离器。并非他们所做的一切都是为了最大限度地定制。

      在分隔符的情况下,我认为最好还是按照他们的风格生活,或者只是想出自己的分隔符视图实现。

      【讨论】:

      • 这样一个被低估的答案..我使用计时器阅读的一些解决方案..大声笑..承认只有好的解决方案是自定义单元格本身是多么困难..
      【解决方案5】:

      要删除底部插图,这对我有用!

      cell.separatorInset = UIEdgeInsetsMake(0, 0, 0, self.tableView.bounds.width)

      【讨论】:

        【解决方案6】:

        删除第一个分隔符,只需要 - 只需删除 tableHeaderView。 你可以在viewDidLoad这样做:

        tableView.tableHeaderView = UIView()
        

        【讨论】:

        • 酷,这适用于没有节标题的表。但是如果表格有节标题,则标题后面的单元格仍然有一个顶部分隔符,它不遵循 tableView.separatorInsets。
        【解决方案7】:

        斯威夫特 5

        隐藏第一个单元格和最后一个单元格的分隔符:

        override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
            if indexPath.row == 0 || indexPath.row == tableView.numberOfRows(inSection: indexPath.section) - 1 {
                cell.separatorInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: tableView.bounds.width)
            }
        }
        

        【讨论】:

        • 当我尝试这个时,它隐藏了第一个单元格的底部分隔符,而不是顶部分隔符。
        猜你喜欢
        • 2020-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-05
        • 1970-01-01
        • 1970-01-01
        • 2013-11-15
        相关资源
        最近更新 更多