swift子视图不会完全填充父视图

时间:2017-03-28 10:23:13

标签: ios objective-c iphone swift3

当app启动时,我使用此方法设置根视图控制器。

func showRootViewController() {
    let sb = UIStoryboard.init(name: "Main", bundle: nil)
    let mainViewController = sb.instantiateInitialViewController()!
    self.window?.rootViewController = mainViewController
    self.window?.makeKeyAndVisible()
}

在主视图控制器中,我将代码设置为容器视图

class MainViewController: UIViewController {

    @IBOutlet weak var headerView: UIView!
    @IBOutlet weak var containerView: UIView!

    override func viewDidLoad() {
        super.viewDidLoad()

            }

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

        if(userManager.hasRegistered()) {
            let sb = UIStoryboard.init(name: "Login", bundle: nil)
            self.setContentViewController(sb.instantiateInitialViewController()!)
        } else {
            let sb = UIStoryboard.init(name: "Registration", bundle: nil)
            self.setContentViewController(sb.instantiateInitialViewController()!)
        }

    }

    func setContentViewController(_ contentViewController: UIViewController) {
        print(self.containerView.frame)
        let contentView = contentViewController.view!
        contentView.frame = self.containerView.bounds
        self.containerView.addSubview(contentView)
    }
}

让我们看看视图,我有容器视图用于添加子视图。我设置背景以帮助每个人解决容器视图的框架 main view

子视图的设计如下:
result design

结果不如我所料。 ContainerView已经到了某个地方(我真的不知道),子视图正在移动到顶部。 result view

请帮帮我。

2 个答案:

答案 0 :(得分:3)

contentView框架设置在错误的位置。 你应该移动这行代码:

contentView.frame = self.containerView.bounds

override func func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    contentView.frame = self.containerView.bounds
}

答案 1 :(得分:0)

您不能依赖viewDidLoad中的尺寸。 尝试改用viewDidLayoutSubviews。请注意,它可以多次调用 我已经解决了这类问题。