Ios 选项卡栏控制器在旋转时在其ViewController数组中添加子视图控制器

Ios 选项卡栏控制器在旋转时在其ViewController数组中添加子视图控制器,ios,swift,iphone,xcode,uitabbarcontroller,Ios,Swift,Iphone,Xcode,Uitabbarcontroller,由于某些原因,我需要添加一个视图控制器作为选项卡栏控制器的子级。在我旋转设备之前,一切正常。旋转时,我的子视图控制器将附加到tabBarController的ViewController数组。最终,选项卡栏项目的数量将增加一个 我不希望将其添加到ViewController阵列。这是密码 import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoa

由于某些原因,我需要添加一个视图控制器作为选项卡栏控制器的子级。在我旋转设备之前,一切正常。旋转时,我的子视图控制器将附加到tabBarController的ViewController数组。最终,选项卡栏项目的数量将增加一个

我不希望将其添加到ViewController阵列。这是密码

import UIKit
class ViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
    addChildVC()
}

func addChildVC() {
    let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ChildVC") as! ChildVC
    self.tabBarController!.add(vc, frame: CGRect(x: 50, y: 150, width: 200, height: 100))   //Any random frame
}}

extension UIViewController {
func add(_ child: UIViewController, frame: CGRect? = nil)
{
    addChild(child)

    if let frame = frame {
        child.view.frame = frame
    }

    view.addSubview(child.view)
    child.didMove(toParent: self)
}}
这就是我的故事板的样子

这里有一个Gif来显示实际发生的情况(请查看选项卡栏,它将移动其位置,因为在旋转时将添加一个新的控制器)


请告诉我是否有任何方法可以解决此问题。

UITabBarController
覆盖
addChild
并将选项卡作为子控制器进行管理[。如果您想要自定义行为,您可能需要覆盖选项卡栏控制器类,覆盖
addChild(\u:)
方法并确定添加方式:自定义方式或通过
super
。但这不是一个好主意。如果您需要一些自定义行为,最好将此子项添加到当前选项卡控制器,或将此选项卡栏控制器添加到父项,然后使用选项卡栏控制器将新子项添加到此共享父项。@ModoLtunzher只是出于好奇;文档中的哪个地方说此方法已被覆盖?顺便说一句,您提供的链接在单击时已断开,请删除其周围的括号。无论如何,我同意建议的解决方案。但在向其添加子项时,至少在选项卡栏控制器和导航控制器中存在问题。据我所知,这是一个iOS错误,或者更确切地说框架的误用(具有讽刺意味的是)。链接导致奇怪的
]
最后,它导致了官方文档一种容器视图控制器,用于管理无线电样式选择界面,其中的选择决定要显示哪个子视图控制器。”<代码>子视图控制器< /代码> -确保考虑DOCS语句来触摸子VCS例程