gpt4 book ai didi

ios - 如何将 UI 元素保留在 UIViewController 及其呈现的 ViewController 之上?

转载 作者:行者123 更新时间:2023-11-30 12:03:48 24 4
gpt4 key购买 nike

我想在我的应用程序的第一个 VC 顶部以及它呈现的第二个 VC 顶部显示一些 UI 元素,例如搜索栏。

我的解决方案是创建一个 ContainerViewController,它调用 addChildViewController(firstViewController)view.addSubview(firstViewController.view)。然后是 view.addSubview(searchBarView),每个 UI 元素都类似。

稍后,FirstViewController 可能会调用 present(secondViewController),理想情况下它会向上滑动到屏幕上,而我的搜索栏和其他元素仍然出现在两个 View Controller 的顶部。

相反,secondViewController 显示在 ContainerViewController 之上,从而隐藏搜索栏。

我还希望,当用户点击搜索栏时,ContainerViewController 在所有内容之上呈现 SearchVC。为此,它很简单 - containerVC.present(searchVC)

如何让这个层次结构正常工作?

最佳答案

如果我理解正确,您的问题是如何在 subview Controller 的顶部(和边界内)呈现 View Controller ,该 subview Controller 的框架可能与父 View 的边界不同。这可以通过将要呈现的 View Controller 的 modalPresentationStyle 属性设置为 .overCurrentContext 并将 subview Controller 的 definesPresentationContext 设置为 >true.

这里有一个简单的示例,展示了它在实践中如何工作:

override func viewDidLoad() {
super.viewDidLoad()

let childViewController = UIViewController()
childViewController.view.backgroundColor = .yellow
childViewController.view.translatesAutoresizingMaskIntoConstraints = true
childViewController.view.frame = view.bounds.insetBy(dx: 60, dy: 60)
view.addSubview(childViewController.view)
addChildViewController(childViewController)
childViewController.didMove(toParentViewController: self)

// Wait a bit...
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 2) {
let viewControllerToPresent = UIViewController()
viewControllerToPresent.modalPresentationStyle = .overCurrentContext // sets to show itself over current context
viewControllerToPresent.view.backgroundColor = .red

childViewController.definesPresentationContext = true // defines itself as current context
childViewController.present(viewControllerToPresent, animated: true, completion: nil)
}
}

关于ios - 如何将 UI 元素保留在 UIViewController 及其呈现的 ViewController 之上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46893031/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com