实施 previousScrollViewYOffset 不起作用

implement previousScrollViewYOffset not work

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    CGRect frame = self.navigationController.navigationBar.frame;
    CGFloat size = frame.size.height - 21;
    CGFloat framePercentageHidden = ((20 - frame.origin.y) / (frame.size.height - 1));
    CGFloat scrollOffset = scrollView.contentOffset.y;
    CGFloat scrollDiff = scrollOffset - self.previousScrollViewYOffset;
    CGFloat scrollHeight = scrollView.frame.size.height;
    CGFloat scrollContentSizeHeight = scrollView.contentSize.height + scrollView.contentInset.bottom;

    if (scrollOffset <= -scrollView.contentInset.top) {
        frame.origin.y = 20;
    } else if ((scrollOffset + scrollHeight) >= scrollContentSizeHeight) {
        frame.origin.y = -size;
    } else {
        frame.origin.y = MIN(20, MAX(-size, frame.origin.y - scrollDiff));
    }

    [self.navigationController.navigationBar setFrame:frame];
    [self updateBarButtonItems:(1 - framePercentageHidden)];
    self.previousScrollViewYOffset = scrollOffset;
}

错误: 属性 'previousScrollViewYOffset' 未在 'HomeScreen'

类型的对象上找到
@interface HomeScreen : UITableViewController <UIScrollViewDelegate,UIScrollViewAccessibilityDelegate>

我添加了 ScrollViewDelegate 为什么看不到 previousScrollViewYOffset 有什么想法?

声明您的 class 符合 UIScrollViewDelegate 协议并不会授予它访问其他属性的权限。这意味着您的 class 将实现委托协议中指定的方法,因此您的 class 可以支持 UIScrollView 作为其委托。所以,声明你的 class 是一个 UIScrollViewDelegate 所做的就是启用你发布的方法。

关于您收到的错误,您应该尝试自己创建 previousScrollViewYOffset 属性 并使用 0 等值对其进行初始化。

我从未尝试过创建这种特定效果,所以我可以关闭,但看起来 previousScrollViewYOffset 是您每次调用 ScrollViewDidScroll 时计算的 class 上的 属性 .下次调用此方法时将使用该计算的结果。如果是这种情况,您需要自己创建 属性,并在 class 的初始化方法中对其进行初始化。

试一试 [编辑添加代码] 让我知道进展如何:

在你的.h中:

@property CGFloat thisFloat;

在您的 .m 顶部:

@synthesize thisFloat;

在你的初始化方法中:

thisFloat = 0.0;

将其设为 属性 并对其进行合成的替代方案 - 因为外部 classes 无法访问 属性 - 您可以将其声明为私有变量.m 是这样的:

@implementation HomeScreen {
    CGFloat previousScrollViewYOffset;
}