Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用节时是否可能有固定的uitableview标题?_Ios_Uitableview - Fatal编程技术网

Ios 使用节时是否可能有固定的uitableview标题?

Ios 使用节时是否可能有固定的uitableview标题?,ios,uitableview,Ios,Uitableview,这个问题不应与此混淆。这是两件不同的事情 在SO上有一个如何使用UITableView标题的问题 只要样式设置为普通,所有这些都可以正常工作,并且主标题固定在顶部 但是,如果我使用部分,则主标题不再粘在顶部,并在滚动到底部时移走 在这个方法中,我返回每个部分的标题 - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 在该方法中,我设置上面标题部分的高度: - (CGFl

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

在SO上有一个如何使用UITableView标题的问题

只要样式设置为
普通
,所有这些都可以正常工作,并且主标题固定在顶部

但是,如果我使用
部分
,则主标题不再粘在顶部,并在滚动到底部时移走

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

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
在该方法中,我设置上面标题部分的高度:

- (CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
在这个方法中,我设置实际的表头

- (void)viewWillAppear:(BOOL)animated {
    ...
    self.recordTableView.tableHeaderView = headerView;
}
在使用节时,是否可能有一个固定的表头?
请问有什么替代解决方案?

没有办法维护
表视图的标题,但是
当您需要唯一的标题时,一种有用的方法是使用
UIViewController
而不是
UITableViewController
,并从
tableView
设置标题(
UIView

大概是这样的:


我没有这样做,但我想尝试的第一件事是将我的tableview放置在
UIView
中,并在该
UIView
中创建我自己的标题。将该视图显示为表的标题似乎是一件小事,它肯定会保持不变。

如果希望将该类保留为UITableViewController,可以将标题作为子视图添加到tableview的superview中。您还必须向下推tableview顶部插图,以便headerview不会隐藏表格

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


如果您想要一个UITableViewController(静态单元格/键盘处理)并且有一个固定的标题,那么您应该使用包含。您可以通过故事板设置带有固定标题的UIViewController,然后使用容器视图嵌入UITableViewController来实现这一点

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


通过实现
prepareforsgue:sender:
方法,您可以从容器视图控制器访问并获取对包含的视图控制器(UITableViewController)的引用。

:)任何情况下都不起作用。你必须决定采取哪种方式才能达到你想要的。静态单元格不是问题,如果需要在tableView上方使用静态视图,可以避免使用,否则就没有理由使用名为UITableViewController的对象,一个UITableView可插入到另一个视图中。@您也可以将静态表视图作为默认视图包含在内,但这不是一个好的解决方案,尤其是当底部有选项卡项时,并且tableview的视图有限,以及当您要向下滚动tableview时,您可能希望顶部导航栏滚动到顶部,使其脱离视图,标题将粘贴到顶部视图。从tableview中取出标题将使您很难实现此结果。这很好。除此之外,您应该使表格视图全屏显示,然后调整内容插入和滚动指示器插入。如果您使用
UIViewController
,则您将失去由
UITableViewController
提供的自动键盘处理功能,如OP在其开头一句中所述,该操作可能重复,这不是同一个问题。看看你不需要容器视图。您可以简单地直接将表添加到视图控制器,但当然不是全屏。在表格上方创建静态视图。@C6Silver UITableViewController可能比普通UIViewController和UITableView更好,正如我在回答(静态单元格/键盘处理)的开头所说的那样@Joony根据您的插入语非常公平。这当然是最好的方法,但有一个问题是,如果您计划使用refreshControl和添加到navigationItem的searchController,那么当您拉动刷新时,tableView内容将向下移动,但固定标题将不会移动,并被橡皮筋导航栏覆盖。因此,如果需要搜索栏,最好将其添加为tableView.tableHeaderView,直到排序完成。
- (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)];
 }