我有UIViewController
嵌入式UITableView
。单击此表视图中的单元格时,我使用pushViewController
将目标控制器推入导航控制器中,并将所有这些控制器嵌入其中。
导航项的UISearchBar
为titleView
使用(viewDidLoad
}:
let searchBar = UISearchBar()
searchBar.delegate = self
navigationItem.titleView = searchBar
按下新视图控制器并加载新视图时,导航栏底部会出现奇怪的间隙。看起来它似乎试图保留导航栏的现有高度(由于搜索栏而更高),而不是在过渡期间按比例放大和缩小,这是默认情况下发生的。这是一个例子(UIView被涂成黑色以突出显示)
正如您所看到的,当我滑回到表视图时,它似乎修复了第二个视图,但随后桌面视图的偏移被破坏了。
我已尝试使用新的Xcode项目重现这一点,但我无法做到。一切正常。显然,我实际上并不想创建一个新项目,所以我想弄清楚我做错了什么。
我认为这个问题可能类似:
iOS 7 UITableView: How to remove space between navigation bar and first cell
但我不希望初始导航栏的高度变小,而且我也搞砸了其他各种问题中提出的所有插图,但这些变体都没有起作用。
我对第二个控制器中的tableview和嵌入式scrollview都有IB约束,它们都设置为与安全区对齐。
我猜测那里有一些显而易见的东西我不知道,但我特别感到困惑的是刷回来的行为。
有什么想法吗?
答案 0 :(得分:2)
我最后通过向我的初始视图控制器添加viewWillDisappear
来“修复”这个:
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
navigationController?.view.layoutSubviews()
}
这对我来说是有道理的,这解决了这个问题,但它看起来很骇人听闻。我正在调查其他途径,但由于它确实构成了对主要问题的解决方案,我将回答我自己的问题。