调整 uitableview 部分页脚的高度

Posted

技术标签:

【中文标题】调整 uitableview 部分页脚的高度【英文标题】:Adjusting the height of a uitableview section footer 【发布时间】:2014-05-26 20:11:24 【问题描述】:

我刚开始使用 UITableView 部分页脚,但遇到了一些问题。因此,我有一个 UITableView,其底部使用页脚附加了一个编辑按钮。我的第一个问题是,当您单击该按钮时,页脚的大小应加倍,因为编辑按钮随后变为添加按钮和完成按钮,而不仅仅是一个按钮。使页脚大小变大的最佳方法是什么。我尝试通过self.tableView.tableFooterView.frame = CGRectMake(0, 0, 320, 88); 更改页脚的框架,但这不起作用。

我的第二个问题是我希望页脚始终随表格滚动,就像它只是另一个单元格一样。无论如何,它都应该位于表格的底部。如果用户向下滚动,它不应该停在屏幕底部并粘住,它应该只与 tableview 的其余部分一起滚动。我该如何解决这个问题?

这是我创建页脚的方式:

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section 
    return 48;


- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section 
    UIView *view = [[UIView alloc] initWithFrame:CGRectZero];
    //view.backgroundColor = [UIColor grayColor];

    self.addButton = [UIButton buttonWithType:UIButtonTypeCustom];
    self.addButton.frame = CGRectMake(0, 0, 320, 44);
    [self.addButton setImage:[UIImage imageNamed:@"Add_Class_Button"] forState:UIControlStateNormal];
    [self.addButton setImage:[UIImage imageNamed:@"Add_Class_Button"] forState:UIControlStateHighlighted];
    [self.addButton addTarget:self action:@selector(addSelected:) forControlEvents:UIControlEventTouchUpInside];
    self.addButton.hidden = YES;
    [view addSubview:self.addButton];

    self.editButton = [UIButton buttonWithType:UIButtonTypeCustom];
    self.editButton.frame = CGRectMake(0, 0, 320, 44);
    [self.editButton setImage:[UIImage imageNamed:@"Edit_Classes_Button"] forState:UIControlStateNormal];
    [self.editButton setImage:[UIImage imageNamed:@"Edit_Classes_Button"] forState:UIControlStateHighlighted];
    [self.editButton addTarget:self action:@selector(editSelected:) forControlEvents:UIControlEventTouchUpInside];
    [view addSubview:self.editButton];

    self.editDoneButton = [UIButton buttonWithType:UIButtonTypeCustom];
    self.editDoneButton.frame = CGRectMake(0, self.addClassButton.frame.size.height-2, 320, 44);
    [self.editDoneButton setImage:[UIImage imageNamed:@"Edit_Classes_Button"] forState:UIControlStateNormal];
    [self.editDoneButton setImage:[UIImage imageNamed:@"Edit_Classes_Button"] forState:UIControlStateHighlighted];
    [self.editDoneButton addTarget:self action:@selector(doneSelected) forControlEvents:UIControlEventTouchUpInside];
    self.editDoneButton.hidden = YES;
    [view addSubview:self.editDoneButton];

    self.editLabel = [[UILabel alloc] init];
    self.editLabel.frame = CGRectMake(10, 5, 100, 30);
    self.editLabel.text = @"Edit";
    self.editLabel.font = [UIFont fontWithName:@"HelveticaNeue" size:17];
    [view addSubview:self.editLabel];

    self.addLabel = [[UILabel alloc] init];
    self.addLabel.frame = CGRectMake(10, 5, 100, 30);
    self.addLabel.text = @"Add";
    self.addLabel.font = [UIFont fontWithName:@"HelveticaNeue" size:17];
    self.addLabel.hidden = YES;
    [view addSubview:self.addLabel];

    self.editDoneLabel = [[UILabel alloc] init];
    self.editDoneLabel.frame = CGRectMake(10, self.addClassButton.frame.size.height + 5, 150, 30);
    self.editDoneLabel.text = @"Done";
    self.editDoneLabel.font = [UIFont fontWithName:@"HelveticaNeue" size:17];
    self.editDoneLabel.hidden = YES;
    [view addSubview:self.editDoneLabel];

    self.theLine = [[UIView alloc] init];
    self.theLine.frame = CGRectMake(0, 0, 320, .5);
    UIColor *borderColor = [UIColor colorWithRed:193/255.5 green:193/255.0 blue:193/255.0 alpha:1.0];
    self.theLine.backgroundColor = borderColor;
    [view addSubview:self.theLine];

    return view;

编辑

在考虑到下面的答案之后,这就是我切换到的,但现在我的页脚所在的位置,只有一个灰色的矩形。

这是我现在使用的代码:

-(void)setUpFooter 

    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 48)];
    view.backgroundColor = [UIColor redColor];

    self.addButton = [UIButton buttonWithType:UIButtonTypeCustom];
    self.addButton.frame = CGRectMake(0, 0, 320, 44);
    [self.addButton setImage:[UIImage imageNamed:@"Add_Class_Button"] forState:UIControlStateNormal];
    [self.addButton setImage:[UIImage imageNamed:@"Add_Class_Button"] forState:UIControlStateHighlighted];
    [self.addButton addTarget:self action:@selector(addSelected:) forControlEvents:UIControlEventTouchUpInside];
    self.addButton.hidden = YES;
    [view addSubview:self.addButton];

    self.editButton = [UIButton buttonWithType:UIButtonTypeCustom];
    self.editButton.frame = CGRectMake(0, 0, 320, 44);
    [self.editButton setImage:[UIImage imageNamed:@"Edit_Classes_Button"] forState:UIControlStateNormal];
    [self.editButton setImage:[UIImage imageNamed:@"Edit_Classes_Button"] forState:UIControlStateHighlighted];
    [self.editButton addTarget:self action:@selector(editSelected:) forControlEvents:UIControlEventTouchUpInside];
    [view addSubview:self.editButton];

    self.editDoneButton = [UIButton buttonWithType:UIButtonTypeCustom];
    self.editDoneButton.frame = CGRectMake(0, self.addClassButton.frame.size.height-2, 320, 44);
    [self.editDoneButton setImage:[UIImage imageNamed:@"Edit_Classes_Button"] forState:UIControlStateNormal];
    [self.editDoneButton setImage:[UIImage imageNamed:@"Edit_Classes_Button"] forState:UIControlStateHighlighted];
    [self.editDoneButton addTarget:self action:@selector(doneSelected) forControlEvents:UIControlEventTouchUpInside];
    self.editDoneButton.hidden = YES;
    [view addSubview:self.editDoneButton];

    self.editLabel = [[UILabel alloc] init];
    self.editLabel.frame = CGRectMake(10, 5, 100, 30);
    self.editLabel.text = @"Edit";
    self.editLabel.font = [UIFont fontWithName:@"HelveticaNeue" size:17];
    [view addSubview:self.editLabel];

    self.addLabel = [[UILabel alloc] init];
    self.addLabel.frame = CGRectMake(10, 5, 100, 30);
    self.addLabel.text = @"Add";
    self.addLabel.font = [UIFont fontWithName:@"HelveticaNeue" size:17];
    self.addLabel.hidden = YES;
    [view addSubview:self.addLabel];

    self.editDoneLabel = [[UILabel alloc] init];
    self.editDoneLabel.frame = CGRectMake(10, self.addClassButton.frame.size.height + 5, 150, 30);
    self.editDoneLabel.text = @"Done";
    self.editDoneLabel.font = [UIFont fontWithName:@"HelveticaNeue" size:17];
    self.editDoneLabel.hidden = YES;
    [view addSubview:self.editDoneLabel];

    self.theLine = [[UIView alloc] init];
    self.theLine.frame = CGRectMake(0, 0, 320, .5);
    UIColor *borderColor = [UIColor colorWithRed:193/255.5 green:193/255.0 blue:193/255.0 alpha:1.0];
    self.theLine.backgroundColor = borderColor;
    [view addSubview:self.theLine];

    view.userInteractionEnabled = YES;
    self.classTableView.tableFooterView = view;
    self.classTableView.tableFooterView.userInteractionEnabled = YES;


【问题讨论】:

【参考方案1】:

希望我能帮上忙。

要设置节页脚高度,您还必须更改方法heightForFooterInSection 中的返回值。要重新加载高度,您可以调用[tableView reloadData][tableView reloadSections:...]

表格部分页脚始终贴在屏幕底部,但在表格视图之后有一个不同的视图用于放置内容。 tableView.tableFooterView 是位于表视图之后的视图。更改此项以在表格视图之后添加元素。

干杯!

【讨论】:

所以如果我把它改成使用tableView.tableFooterView,在tableview的按钮上只有一个空白栏 tableFooterView 就像普通视图一样工作。要改变它的高度,只需改变它的框架。也可以添加子视图等。如果您使用的是 Interface Builder,您可以通过简单地将视图拖放到表格视图底部来添加 tableFooterView。 在这里,我使用 tableView.tableFooterView 的代码更新了我的问题,现在它显示了一个空白方块。【参考方案2】:

UITableView 中有两种类型的页脚。表格底部有表格页脚,每个部分底部有表格部分页脚。

听起来您想使用表 section 标题。但是,您的代码 sn-p 正在设置表格页脚的框架,而不是表格部分页脚。

self.tableView.tableFooterView.frame = CGRectMake(0, 0, 320, 88); 

如果要调整表格部分页脚高度,tableView:heightForFooterInSection: 方法将需要返回不同的值。

【讨论】:

以上是关于调整 uitableview 部分页脚的高度的主要内容,如果未能解决你的问题,请参考以下文章

使用页脚的 UITableView 底部不需要的水平线

无论如何创建一个带有一个通用页脚的 UITableView 吗?

限制 UItableView 的页眉和页脚的视图宽度

设置页脚高度后tableView的contentSize不正确

如何根据标签大小调整 CollectionView 高度

在 uitableview 底部创建一个文本字段并发送按钮,例如 Instagram 评论部分