【问题标题】:View size changing after viewWillAppearviewWillAppear 后视图大小发生变化
【发布时间】:2011-10-22 19:44:12
【问题描述】:

在我的基于 NavigationController 的 iPhone 应用程序中,我有一些元素 a、b、c 另一个视图 X 的子视图。当我推动控制器获取此视图时,在 viewWillAppear 上,我调整了a、b 和 c 根据 X 的大小来正确处理设备方向。问题是 X 的大小在 viewWillAppear 被调用后被改变。我将 X 子类化并编写了一个 setFrame 方法,以便设置断点并尝试查找原因。下面是图像的链接(由于缺少点,我无法直接发布图像)显示 viewWillAppear 处的中断,以及 viewWillAppear 后 setFrame 处的中断与调用堆栈。我需要帮助找出为什么 X 的大小会以这种方式改变。谢谢。

在 viewWillAppear 中: http://img718.imageshack.us/img718/9898/viewwillappearbreak.th.png

viewWillAppear 在子类 setFrame 处中断后: http://img703.imageshack.us/img703/7995/afterviewwillappear.th.png

提前致谢。 (我希望图像能正确显示)。

【问题讨论】:

  • 您对 viewWillAppear 和 viewDidAppear 的实现是什么样的?代码 sn-p 会很好。特别是,您何时从自己的实现中调用 [super viewWillAppear] 和 [super viewDidAppear]?
  • 另外,您是否考虑过在视图中使用自动调整弹簧来让组件在方向改变时调整大小和/或正确定位自己?此外,仔细检查设置了哪些自动调整大小行为可能是个好主意。
  • 顺便说一句,这可能与调用 layoutSubviews 有关,在这种情况下,以下答案可能有用:stackoverflow.com/questions/728372/… 顶部的答案有一个有用的博客文章的链接,该链接与何时调用 layoutSubviews 有关.
  • 实际上我在改变方向时所做的尺寸调整更多地是将图像的比例调整到可用的视图空间,所以自动调整弹簧是不够的。但是,无论如何,这是一个很好的指针。谢谢。

标签: iphone objective-c cocoa-touch uiviewcontroller uinavigationcontroller


【解决方案1】:

感谢所有回复,我提供的信息有限。我终于找到了问题的原因。我的 nib 文件包含一个工具栏(如果您使用导航控制器,我想这是一件坏事)并且我也在调用

setToolbarHidden: NO

在我的导航控制器上。我是 iPhone 编程的新手,并认为 nib 文件中的工具栏会以某种方式显示为导航视图工具栏。似乎情况并非如此。我对问题发生原因的理解是:

  • 视图从笔尖加载了一个工具栏,并且导航控制器有一个可见的工具栏,所以我的 X 视图高度为 328。(调整到屏幕尺寸时,减去了 2 个工具栏的高度。来自导航器控制器和视图中的控制器)。
  • 在 viewWillAppear 之后,导航控制器代码显然找到了 2 个工具栏,因此决定在导航控制器中隐藏一个,将我的 X 视图高度增加 44(到 372)。

我从 nib 文件中删除了工具栏,并通过调用将工具栏项添加到导航控制器工具栏

setToolbarItems

viewWillAppear 后框架的高度保持不变。

感谢您的回复。我希望这个 cmets 能帮助面临同样问题的其他人。

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 2022-07-06
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-23
    • 1970-01-01
    相关资源
    最近更新 更多