Ios Can';如果我在UIViewController和UIAbbar之间切换,请不要滚动回顶部

Ios Can';如果我在UIViewController和UIAbbar之间切换,请不要滚动回顶部,ios,uiviewcontroller,uiscrollview,Ios,Uiviewcontroller,Uiscrollview,我的UIScrollView有问题,如果我单击选项卡栏项目切换到其他ViewController,然后使用UIScrollView返回ViewController,我无法滚动回顶部。我必须再次在ViewController之间切换,然后才能正确显示UIScrollView中的内容。这个过程对用户来说真的很不舒服。这是我的代码: - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [self

我的
UIScrollView
有问题,如果我单击选项卡栏项目切换到其他ViewController,然后使用
UIScrollView
返回ViewController,我无法滚动回顶部。我必须再次在ViewController之间切换,然后才能正确显示
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,

我一直在努力解决这个完全相同的问题!不幸的是,我还没有弄清楚到底是什么原因造成的(苹果方面的bug?),但我已经创造了一个似乎相当有效的解决方法

我所做的是在viewWillDissapear方法中,我将scrollview边界高度位置保存在一个局部浮点变量中,然后将scrollview完全重置为顶部

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

这是我的密码

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

@property (nonatomic) float lastScrollHeight;

@synthesize lastScrollHeight = _lastScrollHeight;

-(float)lastScrollHeight{
    if(!_lastScrollHeight) _lastScrollHeight = 0;
    return _lastScrollHeight;
}
查看布局子视图后,滚动至保存的值(第一次将为零):

每次视图消失时,完全“重置”滚动视图:

-(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;
}

这是我第一次回答有关堆栈溢出的问题!如果你觉得我的答案有用,请点击左边的灰色向上箭头。

我一直在努力解决同样的问题!不幸的是,我还没有弄清楚到底是什么原因造成的(苹果方面的bug?),但我已经创造了一个似乎相当有效的解决方法

我所做的是在viewWillDissapear方法中,我将scrollview边界高度位置保存在一个局部浮点变量中,然后将scrollview完全重置为顶部

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

这是我的密码

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

@property (nonatomic) float lastScrollHeight;

@synthesize lastScrollHeight = _lastScrollHeight;

-(float)lastScrollHeight{
    if(!_lastScrollHeight) _lastScrollHeight = 0;
    return _lastScrollHeight;
}
查看布局子视图后,滚动至保存的值(第一次将为零):

每次视图消失时,完全“重置”滚动视图:

-(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;
}

这是我第一次回答有关堆栈溢出的问题!如果您觉得我的答案有用,请点击左侧的灰色向上箭头。

我不确定是否是这样, 但别忘了在iphone(而不是ipad)上:

您需要确保,如果您获得了uiscrollview(tableview、uiwebview、uicollectionview),此滚动视图是屏幕上唯一返回ScrollTop=YES的滚动视图


将所有其他设置为ScrollTop=NO.

我不确定是否是这种情况, 但别忘了在iphone(而不是ipad)上:

您需要确保,如果您获得了uiscrollview(tableview、uiwebview、uicollectionview),此滚动视图是屏幕上唯一返回ScrollTop=YES的滚动视图


将所有其他设置为ScrollTop=NO.

Hi,这对我来说很有效。但是,不调用此
[self resetApplesBrokenScrollview]使我的标签在我转换之前向上移动,我将你的
-(void)resetApplesBrokenScrollview
方法放入一个视图将显示:动画方法。然后它工作得更好。但是投票支持这个。谢谢。嗨,这对我有用。但是,不调用此
[self resetApplesBrokenScrollview]使我的标签在我转换之前向上移动,我将你的
-(void)resetApplesBrokenScrollview
方法放入一个视图将显示:动画方法。然后它工作得更好。但是投票支持这个。谢谢