简介:
UIScrollView、UICollectionView、UITableView在设备屏幕切换横竖屏时,布局的变化会导致其自动滚动,导致其位置不是原先的位置了。
出现场景:
场景1:以UIScrollView及其子类view,contentSize达到一定的长度,滚动到某个位置时,进行设备横竖屏切换,再次回归设备切换前的方向时,滚动位置发生了变动;
场景2:当前控制器为UIScrollView及其子类view,contentSize达到一定的长度,滚动到某个位置时,进行设备横竖屏切换,或者进行跳转下一控制器(且下一控制器为改控制器的屏幕方向不同;例如:当前屏幕方向和竖屏,下一控制器方向为横屏)。
出现原因:
原因1:设备在横竖屏切换时,会导致屏幕宽(width)和高(height)互换,这样会导致以UIScrollView及其子类view的contentSize变化,引起滚动位置的变化;
原因2:以UIScrollView及其子类view,进行了自动化布局,而不是定宽定高布局。
解决方法:
方法1:采用frame布局;
方法2:自动布局;但是对view的宽高,进行定值设置。
相关代码:
1.问题代码:
tableView.snp.makeConstraints { (make) in
make.top.equalTo(navBar.snp.bottom)
make.left.right.equalToSuperview()
make.bottom.equalTo(-(kTabBarHeight + kBottomSafeMargin))
}
2.解决代码:
tableView.snp.makeConstraints { (make) in
make.left.equalTo(0)
make.top.equalTo(navBar.snp.bottom)
make.width.equalTo(kScreenWidth)
make.height.equalTo(kScreenHeight - (kTabBarHeight + kBottomSafeMargin) - kNavigationHeight)
}