iOS返回原页面scrollView偏差

第一个页面

使用presentViewController方法进入一个横屏页面
返回第一个页面之后顶部就成这样了,一松手就变成这样

打印前后,frame 、contentOffset、contentSize、contentInset的值都挺正常的,只有adjustedContentInset的值,首次进入页面的时候是{64, 0, 0, 0},从横屏页面回来之后,就变成了{32, 0, 0, 0}。
尝试了在scrollViewDidEndDecelerating直接修改contentOffset,但是效果不好看,单纯修改scrollView的contentInsetAdjustmentBehavior和self.view的automaticallyAdjustsScrollViewContentInset以及当前导航控制器的的automaticallyAdjustsScrollViewInsets均无用。
无法找到原因,最后解决方案为:由于从第二个页面返回之后,必须调用viewDidAppear,因此在这个方法中增加修改contentInset的代码,强制修改内边距
代码如下:
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
if (@available(iOS 11.0, *)) {
if ([NSStringFromUIEdgeInsets(self.scrollView.adjustedContentInset ) isEqualToString:NSStringFromUIEdgeInsets(UIEdgeInsetsMake(32, 0, 0, 0))] ) {
self.scrollView.contentInset = UIEdgeInsetsMake(32, 0, 0, 0 );
}
} else {
// Fallback on earlier versions
}
}

原文地址:https://www.cnblogs.com/xiao-xiao-/p/11076660.html