アプリのトップにViewを表示し続ける方法は、UIApplicationからwindowを取得してaddSubviewすると表示できますが、
UIApplication.shared.keyWindow?.addSubview(view)
UINavigationControllerやUITabBarControllerを使っている場合は、それらのsubviewにすることで表示し続けることもできます。
let view = UIView.init(frame: CGRect(x: 0, y: UIScreen.main.bounds.size.height - 50.0, width: UIScreen.main.bounds.size.width, height: 50.0))
view.backgroundColor = UIColor.yellow
self.navigationController?.view.addSubview(view)

しかし、これだと追加したViewの下に本来表示されるViewが隠れてしまうことになります。
そこで、UINavigationControllerを継承したクラスを作り、ViewをaddSubviewしたタイミングで、**self.navigationController?.view.setNeedsLayout()**を呼び出して、viewDidLayoutSubviewsで元々のviewのサイズを再設定します。
NavigationController
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
for subview in self.view.subviews {
if subview.isKind(of: NSClassFromString("UINavigationTransitionView")!) {
subview.frame.size.height = UIScreen.main.bounds.height - 50.0
}
}
}

これで無事にサイズ変更ができました。
また、追加するViewをViewControllerで管理したい場合は、コンテナ機能を使ってchaildViewControllerに設定することができます。
self.navigationController?.addChildViewController(viewController)
self.navigationController?.view.addSubview(viewController.view)
self.navigationController?.didMove(toParentViewController: self)