【问题标题】:Manually Trigger `automaticallyAdjustsScrollViewInsets` at a Certain Time在特定时间手动触发 `automaticallyAdjustsScrollViewInsets`
【发布时间】:2016-12-05 01:12:44
【问题描述】:

我有一个UINavigationController,其中包含一个UIViewController,它是两个UITableViewController 控制器的父级。

当用户点击导航控制器的UIToolbar 中的分段控件时,当前子表控制器会被新的子表控制器换出。这包括从父层次结构中移除旧控制器,并将其视图作为父视图控制器的子视图移除。

当导航视图控制器首次显示时显示的第一个视图控制器具有由automaticallyAdjustsScrollViewInsets 正确配置的contentInset,但是,当我将其拉出并从第二个表视图控制器插入视图时,没有。

此外,如果我旋转设备(缩小UINavigationBar)然后切换回第一个视图控制器,它的contentInset 现在不正确并且不能正确滚动。然而,第二个控制器的contentInset 属性确实是设备旋转的结果。

有没有办法在我需要时手动强制UIViewController 重做它的automaticallyAdjustsScrollViewInsets 操作?

【问题讨论】:

    标签: uitableview uiviewcontroller uiscrollview uinavigationcontroller uikit


    【解决方案1】:

    这不是一个绝对令人惊叹的解决方案,但我找到了一个可行的解决方案。

    插入新的子视图控制器不足以触发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;
    }
    

    我已经测试过了,通过快速隐藏导航栏或工具栏似乎没有视觉故障,所以这个解决方案似乎是可以接受的。

    【讨论】:

      猜你喜欢
      • 2013-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多