我有一个UINavigationController,包含一个UIViewController,它是两个UITableViewController控制器的父级。
当用户点击导航控制器的UIToolbar中的分段控件时,当前子表控制器将与新的子表控制器互换。这包括从父层次结构中删除旧控制器,并将其视图作为父视图控制器的子视图删除。
第一个视图控制器是在导航视图控制器第一次出现时显示的,它的contentInset由automaticallyAdjustsScrollViewInsets正确配置,但是,当我从第二个表视图控制器中取出该视图并插入视图时,该视图控制器没有正确配置。
此外,如果我旋转设备(这缩小了UINavigationBar),然后切换回第一个视图控制器,那么它的contentInset现在是不正确的,并且它不能正确滚动。然而,第二个控制器由于设备旋转而正确地设置了它的contentInset属性。
是否有一种方法可以在需要时手动强制UIViewController重做其automaticallyAdjustsScrollViewInsets操作?
发布于 2016-12-08 18:54:01
这不是一个绝对令人惊奇的方法,但我找到了一个可行的解决方案。
插入一个新的子视图控制器不足以触发UINavigationController,从而自动计算出新子视图中任何滚动视图的适当contentInset值。但!你可以强迫它通过做一些无论如何都需要它的事情来执行这个计算。例如,隐藏并显示导航条或工具栏。
- (void)insertViewController:(UIViewController *)viewController
{
// Add the view to our view
viewController.view.frame = self.view.bounds;
[self.view addSubview:viewController.view];
// Add the new controller as a child
[self addChildViewController:viewController];
[viewController didMoveToParentViewController:self];
// Show and hide the toolbar to force the content inset calculation
self.navigationController.toolbarHidden = YES;
self.navigationController.toolbarHidden = NO;
}我对它进行了测试,通过快速隐藏导航条或工具栏似乎没有视觉故障,因此这个解决方案似乎是可以接受的。
https://stackoverflow.com/questions/40965731
复制相似问题