如何在没有故事板的情况下设置 ViewController 的框架

How to set the frame of a ViewController without storyboard

我想用 ViewController 创建一个视图(例如 100x100)而不使用故事板。我想知道声明 ViewController 框架的最佳方法是什么。

我试过了:

class MyLittleViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()        
        view.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
    }
}

并且我试图在我的 MainViewController 上看到这个视图:

override func viewDidLoad() {
    super.viewDidLoad()

    let myLittleView = MyLittleViewController()
    myLittleView.willMove(toParent: self)
    myLittleView.view.translatesAutoresizingMaskIntoConstraints = false
    myLittleView.view.backgroundColor = .red
    view.addSubview(myLittleView.view)
    // enable auto-sizing (for example, if the device is rotated)
    myLittleView.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    self.addChild(myLittleView)
    myLittleView.didMove(toParent: self)

    myLittleView.view.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
    myLittleView.view.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
}

它没有像我预期的那样工作,因为小视图没有出现在主视图上。有什么提示吗?

您不应将框架布局与 auto-layout 混合设置宽度和高度限制

NSLayoutConstraint.activate([
    myLittleView.view.centerXAnchor.constraint(equalTo: view.centerXAnchor),
    myLittleView.view.centerYAnchor.constraint(equalTo: view.centerYAnchor),
    myLittleView.view.heightAnchor.constraint(equalToConstant:100),
    myLittleView.view.widthAnchor.constraint(equalToConstant:100)
])

myLittleView.view.frame = CGRect(x: 0, y: 0, width: 100, height: 100) 
myLittleView.view.center = view.center

override func loadView() {
    view = UIView()
    view.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
}

编辑:

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
           self.view.backgroundColor = .green
        let myLittleView = MyLittleViewController()
        myLittleView.willMove(toParent: self)
        myLittleView.view.backgroundColor = .red
        view.addSubview(myLittleView.view)
        // enable auto-sizing (for example, if the device is rotated)
        myLittleView.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        self.addChild(myLittleView)
        myLittleView.didMove(toParent: self)
        myLittleView.view.center = view.center
    }
}

class MyLittleViewController: UIViewController {

    override func loadView() {
        view = UIView()
        view.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
    }

}

另一种设置视图控制器框架的方法是覆盖方法 loadView() 并像这样设置视图框架

func loadView() {
   view = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
}