添加到父视图控制器时如何修复子视图不显示在子视图控制器中

How to fix subview not showing in child view controller when added to a parent view controller

我试图在 swift ios 应用程序中将子视图控制器添加到父视图控制器,但是当我添加子视图控制器时,activityIndicatorView 没有出现。我可能会错过什么? 这是一个可以在操场上尝试的片段:

import PlaygroundSupport
import Alamofire

class LoadingViewController: UIViewController {

    private lazy var activityIndicator = UIActivityIndicatorView(style: .gray)

    override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = .white
    activityIndicator.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview(activityIndicator)

        NSLayoutConstraint.activate([
            activityIndicator.centerXAnchor.constraint(equalTo: view.centerXAnchor),
            activityIndicator.centerYAnchor.constraint(equalTo: view.centerYAnchor)
            ])
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        // We use a 0.5 second delay to not show an activity indicator
        // in case our data loads very quickly.
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.0) { [weak self] in
            self?.activityIndicator.startAnimating()
        }
    }

}

// methods for adding and removing child view controllers.
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)
    }

    func remove() {
        // Just to be safe, we check that this view controller
        // is actually added to a parent before removing it.
        guard parent != nil else {
            return
        }

        willMove(toParent: nil)
        view.removeFromSuperview()
        removeFromParent()
    }
}

class MyViewController : UITabBarController {
    override func loadView() {
        let view = UIView()
        view.backgroundColor = .white

        let label = UILabel()
        label.frame = CGRect(x: 150, y: 200, width: 200, height: 20)
        label.text = "Hello World!"
        label.textColor = .black

        view.addSubview(label)
        self.view = view
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        let loadingViewController = LoadingViewController()
        add(loadingViewController, frame: view.frame)
        AF.request("http://www.youtube.com").response { response in
            print(String(describing: response.response))
            loadingViewController.remove()
        }
    }

}
// Present the view controller in the Live View window
PlaygroundPage.current.liveView = MyViewController()

loadingViewController 视图填充了父视图,我尝试在不同的位置更改背景颜色并且有效。但是我尝试添加的 activityIndi​​cator 或任何其他子视图都没有出现。

尝试添加行

activityIndicator.startAnimating()

在 LoadingViewController 的 viewDidLoad() 方法中 class