安全区域布局和向后兼容性存在一些问题。在这里查看我的评论。
您也许可以通过附加约束来解决问题,例如 superview.top 的 1000 优先级 >= 20.0 和 750 优先级 == safearea.top。如果您总是显示状态栏,那应该可以解决问题。
更好的方法可能是为 pre-iOS 11 和 iOS-11 及更高版本设置单独的故事板/xib,尤其是当您遇到比这更多的问题时。更可取的原因是因为在 iOS 11 之前,您应该将约束布局到顶部/底部布局指南,但对于 iOS 11,您应该将它们布置到安全区域。布局指南不见了。为 iOS 11 之前的布局指南布局在风格上比仅偏移至少 20 像素要好,即使结果将是相同的 IFF 您总是显示状态栏。
如果您采用这种方法,您需要将每个文件设置为将在其上使用的正确部署目标(iOS 11 或更早版本),以便 Xcode 不会给您警告并允许您使用布局指南或安全区域,视情况而定。在您的代码中,在运行时检查 iOS 11,然后加载适当的故事板/xib。
这种方法的缺点是维护,(您将有两组视图控制器来维护和保持同步),但是一旦您的应用程序仅支持 iOS 11+ 或 Apple 修复了向后兼容性布局指南约束生成,您可以获得摆脱 iOS 11 之前的版本。
顺便说一句,你是如何显示你看到这个的控制器的?它只是根视图控制器还是您展示了它,或者..?我注意到的问题与推送视图控制器有关,因此您可能遇到了不同的情况。