iOS 7 – navigationController设置我的UIScrollView的contentInset和ContentOffset
我有一个UIScrollView(实际上是一个UICollectionView,但可能无所谓)。 当它出现在IOS 7中时,导航控制器将其contentInset和contentOffset设置为我不想要的值。 它似乎在尝试调整状态栏和导航栏。 我非常喜欢这让他们孤单。 我已经通过覆盖contentInset和contentOffset的getter和setter方法解决了这个问题,用一个标志来告诉对象是否应该接受一个set。 但有没有更好的办法?
尝试在您的主视图控制器中设置self.automaticallyAdjustsScrollViewInsets = NO 。 
 这是在iOS 7中引入的,因此如果您支持iOS 6及更低版本,则可能需要使用iOS版本检查进行打包。 
更新
 如果您正在使用故事板,则可以在界面构build器中执行此操作,并通过选中所选控制器的'Adjust Scroll View Insets'来执行此操作。 

我有一个类似的问题,closuresviewController后,我的tableView的contentOffset被更改为(0,-64)。
我的解决scheme有点奇怪,我尝试了所有其他的答案,但没有成功,唯一解决我的问题是切换.xib控件树中的tableView位置
这是在父视图中的第一个控件像这样:

我在ImageView之后移动了tableView,它工作正常:

似乎把表视图放在第一个位置是造成麻烦,并将表视图移动到另一个位置解决了问题。
PD我没有使用autoLayout都不是故事板
希望这可以帮助别人!
我有两个解决scheme:
1。
 self.view = scrollView; 
2。
 [self.navigationController.toolbar setTranslucent:NO]; 
我有同样的问题。
- 
设置 self.automaticallyAdjustsScrollViewInsets = NO解决了一些视图的问题,但并不是无处不在。
- 
第二个解决scheme是在viewWillLayoutSubviews中设置tableview / view / scrollview的内容偏移量: - (void)viewWillLayoutSubviews { //Arrange the view CGRect tempViewFrame = self.view.frame; if (tempViewFrame.origin.y == 64.0f) { tempViewFrame.origin.y = 0; self.view.frame = tempViewFrame; } }
这就够了
 - (void)viewDidLoad { [super viewDidLoad]; self.automaticallyAdjustsScrollViewInsets = NO; 
这解决了这两个情况下的问题:
- 显示状态栏
- 
显示状态栏+导航栏 override func viewDidLayoutSubviews() { NSLog("ORIGIN: \(self.view.frame.origin.y)") if self.view.frame.origin.y == 0 { if let rect = self.navigationController?.navigationBar.frame { let y = rect.size.height + rect.origin.y self.tableView.contentInset = UIEdgeInsetsMake(y, 0, 0, 0) } } else if self.view.frame.origin.y == 44 || self.view.frame.origin.y == 64 { self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0) } }
 其他答案可能适合你,但他们不适合我。 对我来说有效的是手动设置viewDidLayoutSubviews和viewWillAppear中的contentOffset的y属性: 
 override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() // Set the offset to go below the status bar collectionView.contentOffset.y = -UIApplication.shared.statusBarFrame.height } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) // Set the offset to go below the status bar collectionView.contentOffset.y = -UIApplication.shared.statusBarFrame.height } 
 在我的情况下,我的控制器有一个儿童收集视图,有时会得到contentOffset调整和其他时间不。 我规范化的方式是每次只是手动调整它。 我想把内容偏移到状态栏的下面,所以我使用状态栏高度作为值(负数,因为我希望内容被按下)。