在iMessage中的viewController changin的TopAnchor演示模式之间的扩展

时间:2017-01-14 12:42:39

标签: ios swift uiviewcontroller imessage-extension

我正在进行调查iMessage应用程序(是的,我知道)并且在演示模式之间移动时出现问题。下面的系列屏幕截图显示,当应用程序启动时,在紧凑模式下一切都很好。扩展后一切仍然正确,但是当我回到紧凑状态时,内容会向下移动,看起来与大消息导航栏的高度相同(86我相信)

enter image description here

我在切换回紧凑视图时尝试将顶部约束设置为-86,但是,这或者什么都不做或者将它发送回应该的位置然后减去86以使它消失得太高。我已经在应用程序的IceCream示例项目中创建了这个项目,因此不确定这个问题的来源(可能是自动布局,但所有内容都固定在布局指南中)

这是添加视图控制器的代码:

func loadTheViewController(controller: UIViewController) {
    // Remove any existing child controllers.
    for child in childViewControllers {
        child.willMove(toParentViewController: nil)
        child.view.removeFromSuperview()
        child.removeFromParentViewController()
    }

    // Embed the new controller.
    addChildViewController(controller)

    controller.view.frame = view.bounds
    controller.view.translatesAutoresizingMaskIntoConstraints = true
    view.addSubview(controller.view)

    controller.view.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
    controller.view.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
    controller.view.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
    controller.view.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true

    controller.didMove(toParentViewController: self)
}

我一直在努力解决这个问题,所以欢迎任何建议。

1 个答案:

答案 0 :(得分:1)

您正在设置视图约束,但您已将translatesAutoresizingMaskIntoConstraints设置为true。自动调整遮罩约束可能会与您添加的约束冲突,从而导致意外结果。你应该改为:

controller.view.translatesAutoresizingMaskIntoConstraints = false

而不是固定到view.topAnchor,您应该固定topLayoutGuide,这将考虑顶部导航栏。

controller.view.topAnchor.constraint(equalTo: topLayoutGuide.bottomAnchor).isActive = true

类似地,

controller.view.bottomAnchor.constraint(equalTo: bottomLayoutGuide.topAnchor).isActive = true