常见情况:
场景1:以UIScrollView及其子类view,contentSize达到一定的长度,滚动到某个位置时,进行设备横竖屏切换,再次回归设备切换前的方向时,滚动位置发生了变动;
场景2:当前控制器为UIScrollView及其子类view,contentSize达到一定的长度,滚动到某个位置时,进行设备横竖屏切换,或者进行跳转下一控制器(且下一控制器为改控制器的屏幕方向不同;例如:当前屏幕方向和竖屏,下一控制器方向为横屏)。
原因分析:
原因1:设备在横竖屏切换时,会导致屏幕宽(width)和高(height)互换,这样会导致以UIScrollView及其子类view的contentOffset变化,引起滚动位置的变化;
原因2:以UIScrollView及其子类view,进行了自动化布局,而不是定宽定高布局。
可以尝试打印、观察变化contentOffset
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
NSLog(@"偏移量---%@",NSStringFromCGPoint([self.collectionView contentOffset]));
}
解决办法:
方法1:采用frame布局;
方法2:自动布局;但是对view的宽高,进行定值设置。
[self.collectionView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo((self.view)).offset(0);
make.top.equalTo(self.statusBar.mas_bottom);
make.width.equalTo(@VERTICAL_SCREEN_WIDTH);
make.height.equalTo(@(VERTICAL_SCREEN_HEIGHT - StatusHeight));
}];