我的UIScrollView出现了一个奇怪的界面错误,我无法弄清楚如何解决它。 我只写了一行代码(如下所示),这是一个空白项目的设置,很容易重现!
环境:
我的UIScrollView
包含UISegmentedControl
(因为
控件是动态加载的,它可能超过屏幕的宽度,scrollView应该水平滚动segmentedControl,scrollview的高度与UISegmentedControl的相同)。
包含它的ViewController嵌入在tabBar(或导航栏,也显示错误)。整个过程都是使用自动布局。
错误:
当我将SegmentedControl向右滚动一定程度然后通过单击tabBarController上的另一个选项卡切换viewController时,分段控件的内容偏移在切换回初始viewcontroller时会奇怪地移位。当我尝试滚动到滚动视图的最左边部分时,它不会让我。当切换标签几次时,它会再次修复,我可以完成此操作。
我做了什么(你可以重现这个吗?):
在viewDidload中添加此代码
[self.segmentedControl insertSegmentWithTitle:@"A really long title so it you have to scroll to see it" atIndex: 0 animated: NO];
创建一个空白视图控制器并将其添加为tabbarController的第二个viewController。
这就是我的故事板的样子:
现在运行项目,将分段控件滚动到它的右端即可。切换选项卡并切换回来,请告诉我你的滚动视图现在的行为 - 以及为什么。
我的猜测是否与Auto Layout有关?虽然无法弄明白。
我尝试通过在viewDidAppear中设置scrollView的contentSize或在viewDidAppear中更改scrollView的内容偏移量或更改帧,这些的组合以及不是......来解决此问题。
额外问题:
是否不再需要设置scrollViews contentSize属性?为什么会自动滚动内容?
答案 0 :(得分:2)
googeling后,我在另一个StackOverflow问题中找到了答案。
您需要做的是将scrollview.contentOffset
保存在viewWillDisappear
上,
将其设置为CGPointZero
上的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;
}