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

时间:2014-05-31 11:35:44

标签: ios 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;
}

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

4 个答案:

答案 0 :(得分:62)

如果你想要一个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)的引用。

答案 1 :(得分:26)

无法维护tableView固定的标题,但是 当您需要唯一标头时,一种有用的方法是使用UIViewController而不是UITableViewController,并从{设置标题UIView输出 {1}}。

这样的事情:

enter image description here

答案 2 :(得分:4)

如果要将类保留为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)];
 }

答案 3 :(得分:2)

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