iOS 11 TableView到导航栏下面的UIView奇数空间

时间:2018-01-30 14:38:49

标签: ios iphone xcode uitableview uiscrollview

我有UIViewController嵌入式UITableView。单击此表视图中的单元格时,我使用pushViewController将目标控制器推入导航控制器中,并将所有这些控制器嵌入其中。

导航项的UISearchBartitleView使用(viewDidLoad}:

let searchBar = UISearchBar()
searchBar.delegate = self
navigationItem.titleView = searchBar

按下新视图控制器并加载新视图时,导航栏底部会出现奇怪的间隙。看起来它似乎试图保留导航栏的现有高度(由于搜索栏而更高),而不是在过渡期间按比例放大和缩小,这是默认情况下发生的。这是一个例子(UIView被涂成黑色以突出显示)

example

正如您所看到的,当我滑回到表视图时,它似乎修复了第二个视图,但随后桌面视图的偏移被破坏了。

我已尝试使用新的Xcode项目重现这一点,但我无法做到。一切正常。显然,我实际上并不想创建一个新项目,所以我想弄清楚我做错了什么。

我认为这个问题可能类似:

iOS 7 UITableView: How to remove space between navigation bar and first cell

但我不希望初始导航栏的高度变小,而且我也搞砸了其他各种问题中提出的所有插图,但这些变体都没有起作用。

我对第二个控制器中的tableview和嵌入式scrollview都有IB约束,它们都设置为与安全区对齐。

我猜测那里有一些显而易见的东西我不知道,但我特别感到困惑的是刷回来的行为。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

我最后通过向我的初始视图控制器添加viewWillDisappear来“修复”这个:

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    navigationController?.view.layoutSubviews()
}

这对我来说是有道理的,这解决了这个问题,但它看起来很骇人听闻。我正在调查其他途径,但由于它确实构成了对主要问题的解决方案,我将回答我自己的问题。