ios - 如果我在 UIViewController 和 UITabBar 之间切换,则无法滚动回顶部

标签 ios uiviewcontroller uiscrollview

我的 UIScrollView 有问题,如果我单击一个标签栏项目切换到另一个 ViewController,然后返回到带有 UIScrollView 的 ViewController我无法滚动回顶部。我必须在 ViewControllers 和 UIScrollView 中的内容之间再次切换。正确显示。这个过程对用户来说真的很不舒服。这是我的代码:

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    [self becomeFirstResponder];  // View as first responder

    scrollView.scrollEnabled = YES;
    [scrollView setUserInteractionEnabled:YES];
    testLabel.text = @"there is a long, long text normally";   
}

我没有故意设置 contentSize,因为 UIScrollView根据此标签自动获取正确的高度。我的问题是如果我向下滚动然后切换到另一个 ViewController,当我再次回到这个屏幕时,我无法再向上滚动到顶部。

一些进一步的信息:
使用自动布局,层次结构是:ViewController - View - UIScrollView - Label, ...

最佳答案

我一直在努力解决这个完全相同的问题!不幸的是,我无法确切地弄清楚发生了什么或导致它(Apple 方面的错误?),但我已经创建了一个看起来相当有效的解决方法。

我正在做的是在 viewWillDissapear 方法中,我将 ScrollView 边界高度位置保存在本地浮点变量中,然后将 ScrollView 完全重置到顶部。

然后在 didLayoutSubviews 方法中,我滚动回保存的位置。

这是我的代码。

用于存储最后滚动值并延迟实例化的设置变量:

@property (nonatomic) float lastScrollHeight;

@synthesize lastScrollHeight = _lastScrollHeight;

-(float)lastScrollHeight{
    if(!_lastScrollHeight) _lastScrollHeight = 0;
    return _lastScrollHeight;
}

View 完成布局 subview 后,滚动到保存的值(第一次为零):
-(void)viewDidLayoutSubviews{
    [super viewDidLayoutSubviews];
    [self.scrollView setContentOffset:CGPointMake(0.0f, self.lastScrollHeight) animated:NO];
}

每次 View 消失时,完全“重置” ScrollView :
-(void)viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:animated];
    self.lastScrollHeight = self.scrollView.bounds.origin.y;
    [self resetApplesBrokenScrollview];
}

-(void)resetApplesBrokenScrollview{
    [self.scrollView setContentOffset:CGPointZero];
    CGRect sFrame = self.scrollView.bounds;
    sFrame.origin = CGPointZero;
    self.scrollView.bounds = sFrame;
    CGRect cFrame = self.contentView.frame;
    cFrame.origin = CGPointZero;
    self.contentView.frame = cFrame;
}

这是我第一次在 Stack Overflow 上回答问题!如果您觉得我的回答有用,请点击左侧的灰色向上箭头。

关于ios - 如果我在 UIViewController 和 UITabBar 之间切换,则无法滚动回顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14661606/

相关文章:

ios - 按钮操作在第一次点击时不起作用

ios - 在 AppDelegate 中自定义 UISearchBar 和 UINavigationBar 的外观?为什么要在类而不是实例级别进行定制?

c# - 返回 HTTP 401 并说客户端不要重复请求

iOS:确定所有 child 何时调用了 layoutSubviews

ios - UIView 框架在滚动时自动重置

iphone - UIScrollView 滚动时重绘内容?

ios - 向下滚动时如何停止刷新tableview?

ios - 不鼓励在分离的 View Controller 上呈现 View Controller - "detached view controller"的定义?

ios - 如何将 UITextView 添加到 UITableView 详细信息

ios - 当 ScrollView 移动时,Xamarin UIScrollView GestureRecognizerShouldBegin 报告速度为 0