如何使用 MSMessagesViewController -> UIContainerView -> UINavigationController -> UITableViewController 防止导航栏消失?
How to keep navigation bar from disappearing with MSMessagesViewController -> UIContainerView -> UINavigationController -> UITableViewController?
我正在尝试将带有 table 视图控制器的导航控制器放入 iMessage 应用程序 (iOS 10) 中。当我将 UINavigationController
放在 MSMessagesViewController
中的 UIContainerView
中时,这似乎有效。
但是,这在展开视图时会中断。控制器有的UINavigationBar
消失了
我该如何解决这个问题,还是我采取了错误的方法?
您显示的屏幕中导航栏没有任何问题!!
首先假设您使用 view.addSubview
将 UITableViewController
添加到 MSMessagesAppViewController
为了正确显示导航栏。确保您已正确设置所有约束。这是我的示例,希望这对您有用:
// Embed the new controller. Recommended way of presenting VC shown in WWDC (icecream example). Ugly but does the work
addChildViewController(controller)
view.addSubview(controller.view)
let viewRect = view.bounds
controller.view.frame = viewRect
controller.view.translatesAutoresizingMaskIntoConstraints = false
controller.view.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
controller.view.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
controller.view.topAnchor.constraint(equalTo: topLayoutGuide.bottomAnchor).isActive = true
if presentationStyle == .compact {
controller.view.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
} else {
controller.view.bottomAnchor.constraint(equalTo: bottomLayoutGuide.topAnchor).isActive = true
}
controller.didMove(toParentViewController: self)
这是 Apple 开发者论坛上 post 的 link 解决了我的问题:https://forums.developer.apple.com/thread/52049
所以在我的例子中,我使用的是 Storyboard,所以我将为此添加 Storyboard 解决方案。
与 DLee 的回答类似,顶部约束需要设置为 "Top Layout Guide" 而不是 "Top." 以下是 Storyboard 中的样子:
在我的例子中,我使用容器视图来保存所有内容,因此将顶部布局指南设置为顶部约束,它使所有内容都在正确的位置。
在我的 post 中,我最初使用 "Top" 导致部分 iMessage 应用程序(特别是导航栏)消失。
我正在尝试将带有 table 视图控制器的导航控制器放入 iMessage 应用程序 (iOS 10) 中。当我将 UINavigationController
放在 MSMessagesViewController
中的 UIContainerView
中时,这似乎有效。
但是,这在展开视图时会中断。控制器有的UINavigationBar
消失了
我该如何解决这个问题,还是我采取了错误的方法?
您显示的屏幕中导航栏没有任何问题!!
首先假设您使用 view.addSubview
将 UITableViewController
添加到 MSMessagesAppViewController
为了正确显示导航栏。确保您已正确设置所有约束。这是我的示例,希望这对您有用:
// Embed the new controller. Recommended way of presenting VC shown in WWDC (icecream example). Ugly but does the work addChildViewController(controller) view.addSubview(controller.view) let viewRect = view.bounds controller.view.frame = viewRect controller.view.translatesAutoresizingMaskIntoConstraints = false controller.view.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true controller.view.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true controller.view.topAnchor.constraint(equalTo: topLayoutGuide.bottomAnchor).isActive = true if presentationStyle == .compact { controller.view.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true } else { controller.view.bottomAnchor.constraint(equalTo: bottomLayoutGuide.topAnchor).isActive = true } controller.didMove(toParentViewController: self)
这是 Apple 开发者论坛上 post 的 link 解决了我的问题:https://forums.developer.apple.com/thread/52049
所以在我的例子中,我使用的是 Storyboard,所以我将为此添加 Storyboard 解决方案。
与 DLee 的回答类似,顶部约束需要设置为 "Top Layout Guide" 而不是 "Top." 以下是 Storyboard 中的样子:
在我的例子中,我使用容器视图来保存所有内容,因此将顶部布局指南设置为顶部约束,它使所有内容都在正确的位置。
在我的 post 中,我最初使用 "Top" 导致部分 iMessage 应用程序(特别是导航栏)消失。