Một số phương thức hỗ trợ lập trình, note lại cho bản thân.

Autolayout

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
extension UIView {
    func pinToBounds(_ view: UIView) {
        view.translatesAutoresizingMaskIntoConstraints = false

        NSLayoutConstraint.activate([
            view.topAnchor.constraint(equalTo: topAnchor),
            view.bottomAnchor.constraint(equalTo: bottomAnchor),
            view.leadingAnchor.constraint(equalTo: leadingAnchor),
            view.trailingAnchor.constraint(equalTo: trailingAnchor)
        ])
    }
}

Storyboard

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
protocol Storyboardable { }

extension Storyboardable where Self: UIViewController {
    static func instantiateInitialFromStoryboard() -> Self {
        let controller = storyboard().instantiateInitialViewController()
        return controller! as! Self
    }

    static func storyboard(fileName: String? = nil) -> UIStoryboard {
        let storyboard = UIStoryboard(name: fileName ?? storyboardIdentifier, bundle: nil)
        return storyboard
    }

    static var storyboardIdentifier: String {
        return String(describing: self)
    }
}

Cách dùng:

1
2
3
class ViewController: UIViewController, Storyboardable { ... }

let vc = ViewController.instantiateInitialFromStoryboard()

Add child viewcontroller

Sử dụng lại hàm pinToBounds

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
extension UIViewController {
    func insertFullframeChildController( 
        _ childController: UIViewController, 
        toView: UIView? = nil, 
        index: Int) {
        
        let containerView: UIView = toView ?? view
        
        addChild(childController)
        containerView.insertSubview(childController.view, at: index)
        containerView.pinToBounds(childController.view)
        childController.didMove(toParent: self)
}