viewController 的 TopAnchor 在演示模式之间的 iMessage 扩展中发生变化
TopAnchor of viewController changin in iMessage Extension between presentation modes
我正在做一个调查 iMessage 应用程序(是的,我知道)并且在演示模式之间移动时遇到问题。下面的一系列屏幕截图显示,当应用程序启动时,在紧凑模式下一切正常。展开后一切仍然正确,但当我返回压缩时,内容向下移动看起来与大消息导航栏相同的高度(我相信 86)
我试过在切换回紧凑视图时将顶部约束设置为 -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)
}
我一直在努力解决这个问题,所以欢迎提出任何建议。
您正在设置视图约束,但您已将 translatesAutoresizingMaskIntoConstraints
设置为 true。自动调整掩码约束可能会与您添加的约束发生冲突,从而导致意外结果。你应该改为:
controller.view.translatesAutoresizingMaskIntoConstraints = false
此外,您应该固定到 topLayoutGuide
而不是固定到 view.topAnchor
,这将考虑到顶部导航栏。
controller.view.topAnchor.constraint(equalTo: topLayoutGuide.bottomAnchor).isActive = true
同样,
controller.view.bottomAnchor.constraint(equalTo: bottomLayoutGuide.topAnchor).isActive = true
我正在做一个调查 iMessage 应用程序(是的,我知道)并且在演示模式之间移动时遇到问题。下面的一系列屏幕截图显示,当应用程序启动时,在紧凑模式下一切正常。展开后一切仍然正确,但当我返回压缩时,内容向下移动看起来与大消息导航栏相同的高度(我相信 86)
我试过在切换回紧凑视图时将顶部约束设置为 -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)
}
我一直在努力解决这个问题,所以欢迎提出任何建议。
您正在设置视图约束,但您已将 translatesAutoresizingMaskIntoConstraints
设置为 true。自动调整掩码约束可能会与您添加的约束发生冲突,从而导致意外结果。你应该改为:
controller.view.translatesAutoresizingMaskIntoConstraints = false
此外,您应该固定到 topLayoutGuide
而不是固定到 view.topAnchor
,这将考虑到顶部导航栏。
controller.view.topAnchor.constraint(equalTo: topLayoutGuide.bottomAnchor).isActive = true
同样,
controller.view.bottomAnchor.constraint(equalTo: bottomLayoutGuide.topAnchor).isActive = true