【发布时间】:2019-03-05 23:04:29
【问题描述】:
在 ContainerView 内部,我有一个 UITabBarController 子类,我在其中修改了 UITabBar Y 位置。我没有将它放在底部,而是使用以下代码将其移近顶部:
override func viewDidLayoutSubviews() {
tabBar.frame = CGRect(x: 0, y: 0, width: tabBar.frame.size.width, height: tabBar.frame.size.height)
super.viewDidLayoutSubviews()
delegate = self
selectedViewController?.view.frame.origin = CGPoint(x: 0, y: tabBar.frame.size.height)
}
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
selectedViewController?.view.frame.origin = CGPoint(x: 0, y: tabBar.frame.size.height)
}
它最初工作得很好:第一个标签视图包含一个 UITableView,它似乎为 UITabBar 的新位置调整了它的框架。但是,如果我在堆栈上推送一个 ViewController,在推送动画的中途,包含 UITableView 的视图底部会像 UITabBar 一样跳起来。因此,视图顶部的一部分最终位于 UITabBar 后面,并且在将这个新的 ViewController 从堆栈中弹出后,返回到 UITabBarController,视图(带有 tableView)保持在 tabBar 的新位置后面的这个位置。我尝试在 ViewWillAppear、ViewWillDisappear、ViewDidDisappear 中更改视图原点,但这些方法都无法将视图(包含 tableView)的位置重置到 UITabBar 的新位置下方。
我不确定是什么导致了这种情况发生,或者要调查什么生命周期方法。
有什么想法或建议吗?
编辑:TableView 是真正改变它的原点,而不是视图。
【问题讨论】:
-
@Sh_Khan 不幸的是,我也尝试过,但结果相同。然而我注意到的是,当我在容器视图上设置“自动调整子视图”时,它会导致不同的结果..但 t 似乎仍然不正确