弹出回到UIViewController后,UIScrollView的原点发生了变化

Pet*_*obs 57 cocoa-touch storyboard uiscrollview ios

我有一个UIViewController子类作为故事板中的一个场景,其中包含一个UIScrollView包含各种子视图的场景.其中一个子视图是一个UIButton分割成另一个场景UIViewController子类的子视图.当我从视图回来(弹出UIViewController关闭导航控制器堆栈),我发现,滚动视图的起源已经在某种程度上改变了,虽然contentsizecontentoffset似乎是正确的.

有趣的是,该应用程序有一个标签栏,当我离开并返回到该视图时,滚动视图正确设置,偏移量为(0,0).

这个过程基本上没有涉及代码,因为它几乎都在故事板中.由于我对使用故事板相当新,我觉得我做错了什么,虽然我不知道是什么.关于那可能是什么的任何想法?也许是调整问题或限制?

Ale*_*lex 92

在iOS 7/8/9中简单self.automaticallyAdjustsScrollViewInsets = NO;解决了我的问题.

  • 旁注:假设您有一个TabBarController,其中包含一个包含ContainerController的UIViewController,这应该添加到您的TabBarController中. (6认同)
  • 它并没有为我解决问题. (2认同)

Mac*_*ark 30

在弹出的视图控制器的viewWillAppear中尝试此操作:

 self.scrollView.contentOffset = CGPointMake(0, 0);
Run Code Online (Sandbox Code Playgroud)

编辑:当还添加彼得的代码时,您将获得最佳结果:

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:YES];
    self.scrollView.contentOffset = CGPointMake(0, 0);
}
Run Code Online (Sandbox Code Playgroud)

- (void)viewWillDisappear:(BOOL)animated {  
    self.recentContentOffset = self.scrollView.contentOffset;
    [super viewWillDisappear:animated];
}
Run Code Online (Sandbox Code Playgroud)

- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];
    self.scrollView.contentOffset = CGPointMake(0, self.recentContentOffset.y);
}
Run Code Online (Sandbox Code Playgroud)

返回到原始滚动位置,没有视觉副作用,滚动视图本身在返回后正确定位在其超级视图中(这是一个问题).


Pet*_*obs 12

实际上,我把那行代码放进去,viewDidDisappear以便在视图重新出现时记住偏移,我在它之前添加了这一行

 self.contentOffset = self.scrollView.contentOffset;
Run Code Online (Sandbox Code Playgroud)

以及

 - (void)viewDidLayoutSubviews { 
       self.scrollView.contentOffset = self.contentOffset; 
 }
Run Code Online (Sandbox Code Playgroud)


Chu*_*y47 5

我有一个类似的问题,在解除viewController后,我的tableView中的contentOffset被更改为(0,-64).

我的解决方案有点奇怪,我尝试了所有其他答案,但没有成功,唯一解决我的问题的是切换.xib控件树中的tableView位置

它是父视图中的第一个控件,如下所示:

之前

我在ImageView之后移动了tableView并且它工作正常:

后

似乎将表视图放在第一个位置导致了麻烦,并将表视图移动到另一个位置解决了问题.

PD我没有使用autoLayout和故事板

希望这可以帮助别人!


Jos*_*cis 5

我正在使用collectionView,我遇到了类似的问题.对于iOS 11:在尺寸检查器中,有"内容插入".将其设置为"从不".这解决了我的问题.我希望这可以帮助别人.

目标C:

if (@available(iOS 11, *)) {
   [UIScrollView appearance].contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
}
Run Code Online (Sandbox Code Playgroud)

迅速:

if #available(iOS 11, *) {
UIScrollView.appearance().contentInsetAdjustmentBehavior = .never
}
Run Code Online (Sandbox Code Playgroud)

  • 没问题.很高兴我帮忙! (2认同)