gpt4 book ai didi

objective-c - 像在 Facebook iOS 应用程序的时间轴中那样向 ScrollView 添加一个 float 条

转载 作者:塔克拉玛干 更新时间:2023-11-01 19:11:30 26 4
gpt4 key购买 nike

我一直在尝试向我的测试项目添加不同的交互,但我在添加诸如 Facebook 的帖子状态栏之类的东西时遇到了麻烦,该栏位于时间轴 ScrollView 上,当您“重新向下 ScrollView ,但当您向上 ScrollView 时,它仍然停留在导航栏下方。

我一直在创建一个单独的 UIViewController(不是 UIView)并将其作为 subview 添加到主 ViewController。虽然我不太确定从那里去哪里......新 View 如何与 ScrollView 一起滚动?我什至应该使用单独的 View Controller 吗?

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

最佳答案

这里有一些您可以用来开始的示例代码,只需将它添加到您的 View Controller 中即可。它使用通用 UIView 作为 float 条,使用通用 UIScrollView 作为 ScrollView ,但您可以将其更改为任何您想要的。

@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 开发的一般规则是 View Controller 占据整个屏幕, View 用于占据部分屏幕的“ subview ”(尽管 iPad 的情况较少)。无论哪种方式,UIViewController 都有自己的生命周期(willAppeardidAppear 等),这对于 float 栏来说是不需要/不需要的,因此它绝对应该是 UIView

关于objective-c - 像在 Facebook iOS 应用程序的时间轴中那样向 ScrollView 添加一个 float 条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12188416/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com