是否可以禁用滚动tableHeaderView (不要与节标题混淆)。现在每当我滚动表格时,表格中的视图也会滚动显示。
我在做什么:
当我滚动表格时,我想禁用标题为“Profile”的滚动视图。
PS: 我知道如果我从UIViewController而不是UITableViewController继承我的类,这是可以实现的。 但我不想使用UIViewController,因为我使用storyboard来设计静态单元格,如果我使用UIViewController而不是UITableViewController,则编译器会抛出警告“静态表视图仅在嵌入UITableViewController实例时有效”
请告诉我哪个是实现此目的的最佳方法。是否可以使用我当前的方法禁用tableHeader的滚动,或者我是否需要使用UIViewController。
答案 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 :(得分: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);
}