UIStackView中包含多个视图控制器



我有一个UIStackView,我正在动态添加包含的UIViewControllers,这是我的代码;

[self addChildViewController:driverForm];
[self addChildViewController:marketingView];
[self.stackView insertArrangedSubview:driverForm.view atIndex:0];
[self.stackView insertArrangedSubview:marketingView.view atIndex:1];
[driverForm didMoveToParentViewController:self];
[marketingView didMoveToParentViewController:self];

看完文件后,它说我必须打电话给didMoveToParentViewController

我面临的问题是,最后一个UIViewController上的操作没有被调用,但第一个ViewController调用了。如果我交换这些,第一个有效,最后一个无效。

只需将ViewController的视图添加到UIStackView中,如下所示:

yourStackView.addArrangedSubview(yourViewController.view)

此外,您不必担心视图为零,因为它总是返回UIView!

请注意,顺序颠倒,因此最后一个显示在第一个。为了解决这个问题,假设您有一个视图控制器阵列,您可以使用stride反向遍历阵列,并将视图控制器添加到堆栈中。

以下是Swift 5:的快速复制/意大利面版本

private var childViewController: UIViewController
private var stackView: UIStackView?
// MARK: - UIViewController
    
override func loadView() {
    super.loadView()
    
    // 1. Add the child view controller to the parent.
    addChild(childViewController)
    
    // 2 Create and add the stack view containing child view controller's view.
    stackView = UIStackView(arrangedSubviews: [childViewController.view])
    stackView!.axis = .vertical
    self.view.addSubview(stackView!)
    
    // 3. Let the child know that it's been added!
    childViewController.didMove(toParent: self)
}

UIStackView用于在同一UIViewController类中排列多个子视图。如何将其用于不同的UIViewController?

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIStackView_Class_Reference/#//apple_ref/doc/uid/TP40015256-CH1-SW31

最新更新