0

是否可以禁用 tableHeaderView 的滚动(不要与节标题混淆)。现在每当我滚动表格时,tableHeaderView 中的视图也会滚动。

我在做什么:

  1. 我有一个从 UITableViewController 子类化的类。
  2. 在情节提要中,我使用的是静态表格视图。
  3. 表格样式是分组的,我添加了 8 个部分,每个部分都有一行。
  4. 在第 1 部分的顶部,添加了一个视图,即 tableHeaderView。

在此处输入图像描述

在此处输入图像描述

我想在滚动表格时禁用标题为“配置文件”的视图滚动。

PS:我知道如果我从 UIViewController 而不是 UITableViewController 子类化我的类,这是可以实现的。但我不想 UIViewController 因为我使用情节提要设计静态单元格,如果我使用 UIViewController 而不是 UITableViewController 则编译器会抛出警告“静态表视图仅在嵌入 UITableViewController 实例时才有效”

请让我知道哪种方法是实现此目的的最佳方法。是否可以使用我当前的方法禁用 tableHeader 的滚动,或者我是否需要使用 UIViewController 来代替。

4

2 回答 2

5

UIViewController只需使用包含标题视图和容器视图的父级的嵌入segue 。将您嵌入UITableViewController到容器视图中。此答案中的更具体步骤。

如果你想要所有的东西UITableViewController,你可以插入你自己的子视图做这样的事情:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.header = [[UIView alloc] init];
    self.header.frame = CGRectMake(0, 0, self.tableView.bounds.size.width, 44);
    self.header.backgroundColor = [UIColor greenColor];
    [self.tableView addSubview:self.header];
    self.tableView.contentInset = UIEdgeInsetsMake(44, 0, 0, 0);
}

然后在scrollViewDidScroll和朋友中操纵视图的位置:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    self.header.transform = CGAffineTransformMakeTranslation(0, self.tableView.contentOffset.y);
}

我说“和朋友”是因为您需要处理诸如scrollViewDidScrollToTop:. scrollViewDidScroll在滚动期间的每个显示周期中都会被调用,所以这样做看起来完美无缺。

于 2013-09-02T03:23:12.460 回答
1

蒂莫西·穆斯(Timothy Moose)是当场的。这是 iOS8 的必要更改。

单触 (C#)

// create the fixed header view 
headerView = new UIView() {
                    Frame = new RectangleF(0,0,this.View.Frame.Width,44),
                    AutoresizingMask = UIViewAutoresizing.FlexibleWidth,
                    BackgroundColor = UIColor.DarkGray 
                };
// make it the top most layer
headerView.Layer.ZPosition = 1.0f;

// add directly to tableview, do not use TableViewHeader
TableView.AddSubview(headerView);

// TableView will start at the bottom of the nav bar
this.EdgesForExtendedLayout = UIRectEdge.None;

// move the content down the size of the header view
TableView.ContentInset = new UIEdgeInsets(headerView.Bounds.Height,0,0,0);

.....

[Export("scrollViewDidScroll:")]
public virtual void Scrolled(UIScrollView scrollView)
{
            // Keeps header fixed, this is called in the displayLink layer so it wont skip.
           if(headerView!=null) headerView.Transform = CGAffineTransform.MakeTranslation(0, TableView.ContentOffset.Y);


}

[Export ("scrollViewDidScrollToTop:")]
public virtual void ScrolledToTop (UIScrollView scrollView)
{
            // Keeps header fixed, this is called in the displayLink layer so it wont skip.
            if(headerView!=null) headerView.Transform = CGAffineTransform.MakeTranslation(0, TableView.ContentOffset.Y);


}
于 2014-09-30T23:40:22.613 回答