ios - viewController 的 TopAnchor 在 iMessage Extension 中的演示模式之间的变化

标签 ios swift uiviewcontroller imessage-extension

我正在做一个调查 iMessage 应用程序(是的,我知道)并且在演示模式之间移动时遇到问题。下面的一系列屏幕截图显示,当应用程序启动时,在紧凑模式下一切正常。展开后一切仍然正确,但当我返回压缩时,内容向下移动了看起来与大消息导航栏相同的高度(我相信是 86)

enter image description here

当切换回紧凑 View 时,我尝试将顶部约束设置为 -86,但是,这要么不执行任何操作,要么将其发送回应有的位置,然后减去 86,使其在太高的位置消失。我将此项目基于应用程序中的 IceCream 示例项目,因此不确定此问题的来源(可能是自动布局,但所有内容都固定在布局指南中)

这是添加 View Controller 的代码:

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)
}

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

最佳答案

您正在对 View 设置约束,但您已将 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

关于ios - viewController 的 TopAnchor 在 iMessage Extension 中的演示模式之间的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41650098/

相关文章:

ios - 为什么 SpriteKit 场景中的循环图像之间存在间隙?

ios - 带有 2 个动画的 insertRowsAtIndexPaths

ios - 如何使用 swift 监听变量值的变化?

ios - NSURLDomainError 1005 "The Network Connection Was Lost"

swift - Swift 协议(protocol)中的静态类型属性

ios - View Controller 不会关闭并立即呈现新的 View Controller

ios - 从类型 '(Data) throws -> ()' 的抛出函数到非抛出函数类型 '(Data) -> ()' 的转换无效

ios - 主线程在 iOS 中异步运行还是同步运行?

iphone - [UIViewController disablesAutomaticKeyboardDismissal] 什么时候被调用?

Xcode 8 Storyboard空白