方向更改后调整滚动视图插入为真时,滚动视图插入不正确

时间:2016-09-16 05:34:34

标签: ios uitableview uiscrollview

我的项目是基于故事板的,包括以下控制器:

  • 的UINavigationController。
  • UITableViewController - TableViewController,其中包含项目列表。
  • UIViewController - ViewController,显示TableViewController中所选项目的详细信息。

Test project's storyboard

UISearchControllerTableViewController,其searchBar设置为tableHeaderView的{​​{1}}。 tableView的要点在这里:

TableViewController

我已在界面构建器中检查了class TableViewController: UITableViewController { private let searchController = UISearchController(searchResultsController: nil) override func viewDidLoad() { super.viewDidLoad() searchController.searchBar.delegate = self searchController.dimsBackgroundDuringPresentation = false searchController.hidesNavigationBarDuringPresentation = false definesPresentationContext = true tableView.tableHeaderView = searchController.searchBar } } Adjust Scroll View Insets <{1}}。

我已经检查过(实际上尚未取消选中)TableViewController。{/ 1}

当用户点击列表中的某个项目时,它会转到ViewController并提供有关该项目的详细信息。

在大多数情况下,一切都运作顺畅,TableViewController按预期显示:

Scroll View Insets Expected

当用户更改ViewController中的方向然后再回到TableViewController时,会出现此问题。在这种情况下,后者为其表格&#39;:

设置了不正确的内容集

Scroll View Insets Issue

如果在点击项目之前取消搜索,则问题不存在。

在iOS 9模拟器上记录问题:https://vimeo.com/182953863

为了确保表格视图的内容插入有问题,我在viewDidLayoutSubviews TableViewController方法中打印了插页。这是输出:

// Normal mode
UIEdgeInsets(top: 64.0, left: 0.0, bottom: 0.0, right: 0.0)
// After orientation changes in ViewController
UIEdgeInsets(top: 0.0, left: 0.0, bottom: 0.0, right: 0.0)

在SO(123)上提出了许多类似的问题,我从中得出了两个结论:

  1. 如果添加的视图控制器是UITableViewController,则不应出现问题,因为Apple会自动填充它(answer)。情况确实如此,问题仍然存在。
  2. 尝试关闭autoAdjustScrollViewInsets并在代码中手动设置insets。这个应该肯定有用,但我想首先找到问题的罪魁祸首。
  3. 我试图做的事情:

    • hidesNavigationBarDuringPresentation设为true。问题依然存在。
    • definesPresentationContext设置为false,并在self.view.endEditing(true) prepareForSegue中调用TableViewController(此效果无效)。问题消失了。但是搜索栏在视图控制器的层次结构中保持不变,即ViewController,这是不可接受的。
    • prepareForSegue之前searchController.searchBar.resignFirstResponder()的搜索栏中的第一响应者辞职。问题依然存在。

    我已经组装了一个test project来重现这个问题。搜索不起作用,列表项是硬编码的,但它确实重现了这个问题而没有额外的细节。

    我设置搜索控制器的方式一定有错误,但我找不到它。

0 个答案:

没有答案