gpt4 book ai didi

ios - 带有嵌入式导航 Controller 的 Popover 不考虑后退导航的大小

转载 作者:IT王子 更新时间:2023-10-29 07:30:12 25 4
gpt4 key购买 nike

我有一个 UIPopoverController 托管一个 UINavigationController,它包含一个小的 View Controller 层次结构。

我遵循了文档,对于每个 View Controller ,我都设置了 View 的弹出上下文大小,如下所示:

[self setContentSizeForViewInPopover:CGSizeMake(320, 500)];

(每个 Controller 大小不同)

当我在层次结构中向前导航时,这按预期工作——弹出窗口自动动画大小变化以对应于推送的 Controller 。

但是,当我通过导航栏的“后退”按钮在 View 堆栈中导航“后退”时,弹出窗口不会改变大小——它仍然与到达的最深 View 一样大。这对我来说似乎很糟糕;我希望弹出框在弹出 View 堆栈时遵守设置的大小。

我错过了什么吗?

谢谢。

最佳答案

我遇到了同样的问题。上述解决方案对我来说都不是很好,这就是为什么我决定进行一些调查并找出它是如何工作的。

这是我发现的:

  • 当您在 View Controller 中设置 contentSizeForViewInPopover 时,它不会被 popover 本身更改 - 即使在导航到不同的 Controller 时 popover 大小可能会发生变化。
  • 当导航到不同的 Controller 时弹出窗口的大小会发生变化,而返回时,弹出窗口的大小不会恢复
  • 在 viewWillAppear 中更改弹出窗口的大小会产生非常奇怪的动画(假设您在弹出窗口中使用 popController)——我不推荐这样做
  • 对我来说,在 Controller 内部设置硬编码大小根本行不通 - 我的 Controller 必须时大时小 - 虽然会呈现它们的 Controller 知道大小

所有这些痛苦的解决方案如下:

您必须在 viewDidAppear 中重置 currentSetSizeForPopover 的大小。但是你必须小心,当你将设置与字段 currentSetSizeForPopover 中已经设置的大小相同时,popover 将不会改变大小。为此,您可以先设置假尺寸(与之前设置的尺寸不同),然后设置正确的尺寸。即使您的 Controller 嵌套在导航 Controller 内,此解决方案也能正常工作,并且当您在 Controller 之间导航回来时,弹出框会相应地更改其大小。

您可以使用以下辅助方法在 UIViewController 上轻松创建类别,该方法可以设置大小:

- (void) forcePopoverSize {
CGSize currentSetSizeForPopover = self.contentSizeForViewInPopover;
CGSize fakeMomentarySize = CGSizeMake(currentSetSizeForPopover.width - 1.0f, currentSetSizeForPopover.height - 1.0f);
self.contentSizeForViewInPopover = fakeMomentarySize;
self.contentSizeForViewInPopover = currentSetSizeForPopover;
}

然后只需在所需 Controller 的 -viewDidAppear 中调用它即可。

关于ios - 带有嵌入式导航 Controller 的 Popover 不考虑后退导航的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2752394/

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