在Facebook iOS应用程序的时间轴中添加一个浮动栏到滚动视图

我一直在为我的testing项目添加不同的交互function,并且在添加诸如Facebook的发布状态栏,坐标时间轴滚动视图和滚动视图滚动时视图,但在滚动时停留在导航栏下方。

我一直在创build一个单独的UIViewController(而不是UIView),并将其作为子视图添加到主ViewController中。 我不太确定从那里去哪里…新视图如何滚动scrollview? 我应该甚至使用一个单独的viewcontroller?

任何帮助将不胜感激! 谢谢!

这里有一些示例代码可以用来开始,只需将其添加到您的视图控制器。 它使用通用的UIView的浮动栏和一个通用的UIScrollView的滚动视图,但你可以改变,无论你想要的。

 @interface BNLFDetailViewController () <UIScrollViewDelegate> { UIScrollView *_scrollView; UIView *_floatingBarView; CGFloat _lastOffset; } @end 

并在@implementation添加:

 - (void)viewDidLoad { [super viewDidLoad]; _scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds]; _scrollView.delegate = self; _scrollView.contentSize = CGSizeMake(self.view.bounds.size.width, self.view.bounds.size.height * 2); [self.view addSubview:_scrollView]; CGRect f = self.view.bounds; f.size.height = kFloatingBarHeight; _floatingBarView = [[UIView alloc] initWithFrame:f]; _floatingBarView.backgroundColor = [UIColor blackColor]; [self.view addSubview:_floatingBarView]; } - (void)scrollViewDidScroll:(UIScrollView *)scrollView { if (scrollView == _scrollView) { CGFloat offsetChange = _lastOffset - scrollView.contentOffset.y; CGRect f = _floatingBarView.frame; f.origin.y += offsetChange; if (f.origin.y < -kFloatingBarHeight) f.origin.y = -kFloatingBarHeight; if (f.origin.y > 0) f.origin.y = 0; if (scrollView.contentOffset.y <= 0) f.origin.y = 0; //Deal with "bouncing" at the top if (scrollView.contentOffset.y + scrollView.bounds.size.height >= scrollView.contentSize.height) f.origin.y = -kFloatingBarHeight; //Deal with "bouncing" at the bottom _floatingBarView.frame = f; _lastOffset = scrollView.contentOffset.y; } } 

你应该把它做成一个UIView ,而不是一个UIViewController 。 iOS开发中的一般规则是视图控制器占据了整个屏幕,并且视图被用于占据屏幕一部分的“子视图”(尽pipe对于iPad来说情况不是这样)。 无论哪种方式,一个UIViewController有它自己的生命周期( willAppeardidAppear等),这是不需要/浮动栏所需,所以它应该肯定是一个UIView