gpt4 book ai didi

ios - UINavigationController 作为 MSMessagesAppViewController 的 subview

转载 作者:行者123 更新时间:2023-11-28 06:28:24 25 4
gpt4 key购买 nike

我正在创建一个 iMessage 扩展程序,其中对于扩展的演示文稿样式,我想使用 UINavigationController。我正在尝试使用以下函数将导航 Controller 添加为 MSMessagesAppViewController 的 subview :

private func present(viewController: UIViewController) {
viewController.view.frame = view.frame

addChildViewController(viewController)
viewController.didMove(toParentViewController: self)

view.addSubview(viewController.view)
}

我原以为导航 Controller 会以传统方式显示,其导航栏刚好在 iMessage 本身的顶部栏下方。请参阅下图了解我的预期结果:

Expected result

但是,view.frame 似乎实际上延伸到 iMessage 顶部栏下方。因此,我的导航 Controller 的导航栏隐藏在 iMessage 的顶部栏下方。然而, ScrollView 本身的内容 View 无需进一步定制即可正确定位。实际效果请看下图:

Actual result

显然,我可以将导航 Controller 的框架设置为刚好在顶栏下方开始。但是,我正在寻找不太依赖硬编码位置的解决方案。如果这样做, ScrollView 也不会在 iMessage 顶部栏下方继续以达到半透明效果。

理想情况下,导航栏将显示在 iMessage 顶部栏的正下方,就像默认情况下的 ScrollView 一样。

有人知道解决这个问题的方法吗?

最佳答案

经过一番深思熟虑,我找到了一个非常棘手的解决方案。我仍在接受反馈和其他答案。

可以通过创建一个初步的 layoutView 来实现上述目标,它被限制在使用 AutoLayout 的布局指南中。然后,通过设置 UINavigationController 的框架来匹配布局 View 的框架,它实际上只会占据可见区域。

您可以使用 Storyboard 设置一个像我这样的 View ,如下所示:

LayoutView layout

然后在您的容器 View Controller 中(在我的例子中是 createStickerViewController)只要满足约束,就将您的 UINavigationController 的框架分配给布局 View 的框架:

override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()

// Update frame after constraints have been satisfied for layoutView
pickAssetNavigationController.view.frame = layoutView.frame
}

结果是导航 Controller 仅占据实际可见区域,因此导航栏按预期放置在 iMessage 顶部栏的正下方(请参阅原始问题中的图 1)。

关于ios - UINavigationController 作为 MSMessagesAppViewController 的 subview ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41079911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com