我有一个UIScrollView(实际上是UICollectionView,但这可能没关系)。当它出现在IOS 7中时,导航控制器会将其contentInset和contentOffset设置为我不需要的值。它似乎正在尝试调整状态栏和导航栏。我非常希望它让他们一个人呆着。我已经通过覆盖contentInset和contentOffset的getter和setter方法并带有一个标志来告知对象是否应接受一个集合来解决此问题。但是有更好的方法吗?
Answers:
尝试self.automaticallyAdjustsScrollViewInsets = NO
在主视图控制器中进行设置。
引入了此功能,iOS 7
因此如果您需要支持iOS 6
,请在iOS版本检查中进行包装。
更新资料
如果使用情节提要板,则可以在“界面生成器”中执行此操作,也可以通过检查'Adjust Scroll View Insets'
选定的控制器来执行此操作。
我有一个类似的问题,解雇了一个viewController之后,我的tableView的contentOffset更改为(0,-64)。
我的解决方案有点怪异,我尝试了所有其他答案,但没有成功,唯一解决我问题的方法是切换.xib控件树中的tableView位置
它是父视图中的第一个控件,如下所示:
我将tableView移到ImageView之后,它可以正常工作:
似乎将表格视图放在第一个位置会引起麻烦,而将表格视图移到另一个位置可以解决此问题。
PD我既没有使用autoLayout也没有使用故事板
希望这可以帮助某人!
我有两种解决方案:
1。
self.view = scrollView;
2。
[self.navigationController.toolbar setTranslucent:NO];
toolbar
在您的第二个示例中,我需要NavigationBar
像navigationController.NavigationBar.Translucent = false;
(注:Xamarin)那样工作。
我有同样的问题。
设置self.automaticallyAdjustsScrollViewInsets = NO
解决了部分视图的问题,但并非到处都是。
第二种解决方案是在viewWillLayoutSubviews中设置tableview / view / scrollview的content-offset:
- (void)viewWillLayoutSubviews {
//Arrange the view
CGRect tempViewFrame = self.view.frame;
if (tempViewFrame.origin.y == 64.0f) {
tempViewFrame.origin.y = 0;
self.view.frame = tempViewFrame;
}
}
这可以在以下两种情况下解决此问题:
显示状态栏+导航栏
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)
}
}
其他答案可能对您有用,但对我不起作用。对我有用的是手动设置in和的y
属性:contentOffset
viewDidLayoutSubviews
viewWillAppear
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
调整后的视图,有时则不能。我将其标准化的方法是每次都手动对其进行调整。我希望将内容偏移到状态栏下方,因此我将状态栏高度用作值(负值,因为我希望将内容下推)。