UITabBarController中奇怪的接口错误UIScrollView。 被他人重复?

我用我的UIScrollView得到一个奇怪的接口错误,我不知道如何解决它。 我只写了一行代码(如下所示),这是一个空白的项目的设置很容易重现

设置:

我有一个UIScrollView包含一个UISegmentedControl (由于控件的段被dynamic加载,它可以超过屏幕的宽度,scrollView应该水平滚动segmentedControl,scrollview的高度是相同的UISegmentedControl的) 。 包含这个的ViewController被embedded到tabBar(或导航栏,它也显示了错误)。 整个事情是使用自动布局。

错误:

当我将SegmentedControl向右滚动一定程度,然后通过单击tabBarController上的其他选项卡来切换viewController时,分段控件的内容偏移量在切换回初始viewcontroller时会发生奇怪的偏移。 当我尝试滚动到scrollview的最左侧的部分,它不会让我。 当切换标签几次,它再次被固定,我可以做到这一点。

我做了什么(你能重现吗?):

  1. 创build一个空白的单视图的ios项目
  2. 将已经给出的viewControllerembedded到tabbarcontroller中。
  3. 将scrollView放置在视图的上部,从左到右适合屏幕。
  4. 将UISegmentedControl放置在滚动视图的顶部angular落,并拖动滚动视图以适应分段的控件高度高度
  5. 更改分段控件的宽度有点,所以xcode添加一个宽度约束。 在分段控件的宽度约束中,将宽度约束的关系更改为“大于或等于”
  6. 为分段控制创build一个出口
  7. 在viewDidload中添加这段代码

     [self.segmentedControl insertSegmentWithTitle:@"A really long title so it you have to scroll to see it" atIndex: 0 animated: NO]; 
  8. 创build一个空白的viewcontroller并将其添加为tabbarController的第二个viewController。

这是我的故事板的样子:

安装程序的故事板

现在运行该项目,将分段控件滚动到最后。 切换选项卡并切换回来,请告诉我您的滚动视图现在的行为 – 为什么。

我的猜测是,它可能与自动布局有关吗? 不知道什么,但。

我试图通过在viewDidAppear中设置scrollView的contentSize或更改viewDidAppear中的scrollView的内容偏移或更改框架,这些和什么不是的组合….

额外的问题:

是不是必须设置scrollViews的contentSize属性? 为什么会自动滚动内容?

googeling后,我发现在另一个StackOverflow问题的答案。

你需要做的是保存scrollview.contentOffset viewWillDisappear ,将其设置为CGPointZero on viewDidDisappear并将其设置回viewDidLayoutSubviews上的保存状态:

 -(void) viewWillDisappear: (BOOL) animated { self.lastContentOffset = self.scrollView.contentOffset; [super viewWillDisappear: animated]; } -(void) viewDidDisappear:(BOOL)animated { [super viewDidDisappear: animated]; self.scrollView.contentOffset = CGPointZero; } - (void)viewDidLayoutSubviews { [super viewDidlayoutSubviews]; self.scrollView.contentOffset = self.lastContentOffset; }