使用部分时是否可以使用固定的uitableview标头?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用部分时是否可以使用固定的uitableview标头?相关的知识,希望对你有一定的参考价值。

这个问题不应该与这个here.混淆。这是两件不同的事情。

有一个good example如何在SO上使用UITableView标头。

这一切都很好,只要样式设置为plain,主标题就固定在顶部。

但是,如果我使用sections,主标题不再粘到顶部并在向下滚动时移开。

在这个方法中,我返回每个部分的标题。

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section

在这个方法中,我设置上面标题部分的高度:

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

在这个方法中,我正在设置真正的表头。

- (void)viewWillAppear:(BOOL)animated {
    ...
    self.recordTableView.tableHeaderView = headerView;
}

是否可以使用固定的表头,同时使用部分?请问有什么替代解决方案吗?

答案

没有办法保持tableView的标题固定,但是当你需要一个独特的标题时,一个有用的方法是使用UIViewController而不是UITableViewController,并从UIView设置标题(tableView)。

像这样的东西:

另一答案

如果你想要一个UITableViewController(静态单元格/键盘处理)并且有一个固定的标题,那么你应该使用Containment。您可以通过设置带有固定标头的UIViewController,然后使用Container View嵌入UITableViewController,从Storyboard中执行此操作。

Storyboard object for Container View

完成包含视图设置后,右键单击从容器视图拖动到要嵌入的视图控制器 - 在本例中为UITableViewController。

enter image description here

您可以通过实现prepareForSegue:sender:方法从Container View Controller访问并获取对包含的View Controller(UITableViewController)的引用。

另一答案

如果要将类保留为UITableViewController,可以将标题作为子视图添加到tableview的superview中。您还必须将tableview顶部插入,因此您的标题视图不会隐藏表格。

下面是一个放在tableViewController子类中的示例代码(此示例假设您的tableview控制器位于导航控制器内,因此它将视图推送到导航栏下方):

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.automaticallyAdjustsScrollViewInsets = NO;

}

-(void)addHeaderView{
    CGFloat yPosition = self.navigationController.navigationBar.frame.origin.y + self.navigationController.navigationBar.frame.size.height;
    mainHeaderView = [[UIView alloc] init];

    const CGFloat mainHeaderHeight = 44;
    [mainHeaderView setFrame:CGRectMake(0, yPosition, self.view.frame.size.width, mainHeaderHeight)];

    mainHeaderView.backgroundColor = [UIColor redColor];

    [self.tableView.superview addSubview:mainHeaderView];
    [self.tableView setContentInset:UIEdgeInsetsMake(yPosition + mainHeaderHeight, self.tableView.contentInset.left, self.tableView.contentInset.bottom, self.tableView.contentInset.right)];
 }
另一答案

我没有这样做,但我想要尝试的第一件事就是将我的tableview放在UIView中并在那个UIView中制作我自己的标题。似乎是一件微不足道的事情,使得该视图看起来像是表格的标题,它肯定会保持不变。

以上是关于使用部分时是否可以使用固定的uitableview标头?的主要内容,如果未能解决你的问题,请参考以下文章

第一节标题固定在顶部的 UITableView

是否可以使用 Storyboards 创建非全屏 UITableView?

UITableView 部分标题在“浮动”时可以更改吗?

是否可以使用Storyboard创建非全屏UITableView?

使用 UITableView 的可变高度自定义单元格调用 reloadData 时保持 UITableView 的当前位置

UITableView 使用 UIPIckerView 滚动到特定部分?