禁用tableHeaderView(不要与节标题混淆)滚动

时间:2013-09-01 21:33:20

标签: iphone ios uitableview

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

我在做什么:

  1. 我有一个来自UITableViewController的类。
  2. 在故事板中,我使用静态表视图。
  3. 表格样式已分组,我添加了8个部分,每个部分都有一行。
  4. 在第1部分的顶部,添加了一个视图,即tableHeaderView。
  5. enter image description here

    enter image description here

    当我滚动表格时,我想禁用标题为“Profile”的滚动视图。

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

    请告诉我哪个是实现此目的的最佳方法。是否可以使用我当前的方法禁用tableHeader的滚动,或者我是否需要使用UIViewController。

2 个答案:

答案 0 :(得分:5)

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

如果您想要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:这样的角落案件。

答案 1 :(得分:1)

蒂莫西·穆斯当场。以下是iOS8的必要更改。

MonoTouch(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);


}