消除uitableview tablefooterview分隔符

Posted

技术标签:

【中文标题】消除uitableview tablefooterview分隔符【英文标题】:Eliminate uitableview tablefooterview separator 【发布时间】:2014-11-20 16:29:48 【问题描述】:

我有一个带有 tablefooterview 的 uitableview。我想在 tableview 中使用单元格分隔符,但想摆脱默认放置在 tableview 和 tablefooterview 之间的全屏宽度分隔符。我试过了

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

cell.separatorInset = UIEdgeInsetsMake(0, cell.bounds.size.width, 0, 0);

但两者都不起作用

【问题讨论】:

您是否可以选择使用UITableViewUITableViewStylePlain?这会解决你的问题。 @BartekChlebek TableView 是 UITableViewStylePlain,还有 tableView 分隔符 【参考方案1】:

看看这个示例实现。 你可以在这里看到带有plain 风格的 UITableView 实际上会丢失最后一个分隔符,如果设置了 footerView。

(橙色视图是footerView,上面没有分隔符) 当然,在Grouped tableView 中,这与您问题下的 cmets 中讨论的不同。

https://gist.github.com/bartekchlebek/2b05b5ddcc3efec3f514

#import "ViewController.h"

@interface ViewController () <UITableViewDataSource>

@end

@implementation ViewController

- (void)viewDidLoad 
  [super viewDidLoad];
  UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.bounds
                                                        style:UITableViewStylePlain];
  tableView.dataSource = self;
  tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

  UIView *footerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 40)];
  footerView.backgroundColor = [UIColor orangeColor];
  tableView.tableFooterView = footerView;

  [self.view addSubview:tableView];


#pragma mark - UITableViewDataSource

- (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath 
  UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"ID"];
  cell.textLabel.text = [NSString stringWithFormat:@"Row: %@", @(indexPath.row)];
  return cell;


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
  return 20;


@end

【讨论】:

【参考方案2】:

编辑: 我发现一个更简单的方法来避免最后一个部分和表格页脚之间的差距是实现 heightForFooterInSection 并返回一个非常小的值而不是 0。这将导致什么都不可见。

由于某种原因,返回 0 不会抑制在分组样式表视图中呈现节页脚,它会尝试呈现 1 点页脚。 *** 上有关于此的其他讨论。

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section

    return CGFLOAT_MIN;


我能够以一种有点 hacky 的方式完成此操作,但它似乎工作正常。

我的技巧只是将您想要的实际页脚视图放置在包装视图中,框架位置为 (0, -1)。

假设您有一个要使用的表格页脚视图,一个名为 MyTableFooterView 的类。

在这种情况下,您可以这样做:

//This is the view we will actually add as the table footer
//We make it one point shorter since the content will be shifted up 
//one point out of its frame
CGRect footerFrame = CGRectMake(0, 0, self.tableView.width, myFooterHeight-1);
UIView* tableFooterWrapper = [[UIView alloc] initWithFrame:footerFrame];

//This is the view that we are trying to use as a table footer. 
//We place it 1 point up inside the wrapper so it overlaps that pesky 1-point separator.
CGRect contentFrame = CGRectMake(0, -1, self.tableView.width, myFooterHeight);
UIView* footerContent = [[MyTableFooterView alloc] initWithFrame:contentFrame];


//Make sure the footer expands width for to other screen sizes
footerContent.autoresizingMask = UIViewAutoresizingFlexibleWidth;
[tableFooterWrapper addSubview:footerContent];
self.tableView.tableFooterView = tableFooterWrapper;

这对我来说很可靠。可能有一种更惯用的方式,但我还没有遇到过。

【讨论】:

【参考方案3】:

使用以下代码

tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];

【讨论】:

我有一个实际的 tablefooterview 我想使用所以这无济于事 你可以传递一个 [[UIView alloc] initWithFrame:CGRectZero];到footerView @scribbler2309 如果你已经有了要使用的页脚视图,为什么不直接设置呢? 我设置好了。由于我不清楚的原因,表格视图创建了一个全屏分隔线 @ArunGupta 我有一个页脚的实际视图,其中包含标签和按钮以及我设置为 UITableView footerView 的其他内容,有一个单独的分隔线持续存在

以上是关于消除uitableview tablefooterview分隔符的主要内容,如果未能解决你的问题,请参考以下文章

指定表格页脚时,最后一个单元格上缺少 uitableview 分隔符

消除uitableview tablefooterview分隔符

如何在获取 api 响应并存储在 coredata 中然后在 UItableview 中显示后消除重复数据

滑动删除 UITableView (iOS) 中的整个部分

在 iOS 7 上滚动到 UITableView 的底部?

分隔符在具有自动行高的 UITableView 中生成约束问题 [重复]