我有一个 UIScrollView(实际上是一个 UICollectionView,但这可能没关系)。当它出现在 IOS 7 中时,导航控制器将其 contentInset 和 contentOffset 设置为我不想要的值。它似乎正在尝试调整状态栏和导航栏。我非常希望它让他们一个人呆着。我已经通过覆盖 contentInset 和 contentOffset 的 getter 和 setter 方法来解决这个问题,并带有一个标志来告诉对象它是否应该接受一个集合。但是有更好的方法吗?
7 回答
尝试self.automaticallyAdjustsScrollViewInsets = NO
在您的主视图控制器中进行设置。
这是引入的,iOS 7
因此如果您支持以下版本,您可能希望使用 iOS 版本检查来包装它iOS 6
。
更新
如果您正在使用情节提要,您可以在 Interface Builder 中执行此操作,也可以通过检查'Adjust Scroll View Insets'
您选择的控制器来执行此操作。
我遇到了类似的问题,在关闭 viewController 后,tableView 的 contentOffset 更改为 (0, -64)。
我的解决方案有点奇怪,我尝试了所有其他答案但没有成功,解决我的问题的唯一方法是在 .xib 的控件树中切换 tableView 位置
它是父视图中的第一个控件,如下所示:
我在 ImageView 之后移动了 tableView 并且它起作用了:
似乎将表格视图放在第一个位置会引起麻烦,将表格视图移动到另一个位置可以解决问题。
PD我没有使用自动布局也没有故事板
希望这可以帮助某人!
我有两个解决方案:
1.
self.view = scrollView;
2.
[self.navigationController.toolbar setTranslucent:NO];
我有同样的问题。
设置
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; } }
这就够了
- (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) } }
其他答案可能对你有用,但对我没有用。对我有用的是手动设置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
调整,有时不会。我标准化的方式是每次手动调整它。我希望内容偏移到状态栏下方,所以我使用状态栏高度作为值(负数,因为我希望内容被下推)。