IOS7:Pop ViewController 强制 UIImageView 掉落

Posted

技术标签:

【中文标题】IOS7:Pop ViewController 强制 UIImageView 掉落【英文标题】:IOS7: Pop ViewController forces the UIImageView to drop 【发布时间】:2013-11-28 06:11:16 【问题描述】:

将我的项目升级到 ios7 后

当我执行 BACK 按钮并且 UINavigationController 返回上一页时,屏幕顶部的 ImageView 会向下移动。

我使用 IB 进行布局。这些是我的模拟指标:

我已关闭自动布局。关于问题可能是什么的任何想法?我不确定是否有人想查看特定代码,并且我不想用太多代码来混淆问题。

更新:根据评论问题,我想做这些更新:

在应用程序 .h 或 .m 文件的任何地方,我都没有对 imageview 的大小或位置进行任何更改。 在viewDidLoadviewDidAppear 中,我调用了一个名为recalculateAll 的用户定义方法,但它们根本不涉及任何图像视图大小。只是为了尝试一下,我注释掉了整个部分并运行了代码,它仍然跳下来。 在我的init 中,我确实使用它们的x 和y 以编程方式设置了一些图像视图(你会看到#132 看起来像是一个气泡)。

这是我用于从视图控制器移动到 tableviewcontroller 的典型导航:

 GetTimeOffByType *showTimeOffReport = [[GetTimeOffByType alloc] initWithNibName:@"GetTimeOffByType" bundle:nil];
    showTimeOffReport.timeOffType = @"Vacation";
    [self.navigationController pushViewController:showTimeOffReport animated:YES];

这些都是.xib 文件,根本没有故事板。它基本上是一个视图控制器,有一个嵌入式UINavigationController 和 6 个按钮。每次按下按钮时,它都会推送UITableViewController,传递不同的参数并显示不同的数据。我用来返回原始UIViewController 的转换只是iOS 生成的BACK 按钮(因此没有代码显示)

Update#2 希望这将帮助某人解决这种奇怪的行为。因此,如果我要单击showTimeOffReport 上的表格视图单元格以获取单元格详细信息,然后使用 BACK 导航一路返回,它不会跳下。

Update#3 好的,这是我刚刚发现的:跳下与否的问题与 UINavigationBar 的半透明性有关。如果您有一个 Translucent = YES,它将从窗口顶部开始。如果您有一个 translucent = NO,它将从 UINavigationBar 的底部开始。

【问题讨论】:

你是否在当前视图控制器的 viewWillAppear/viewDidDisappear 方法中做任何与视图框架相关的事情? @KyleClegg,我正在使用 viewWillAppear,以便如果某些内容得到更新(它是 tabBarApplication),当他们切换回此视图控制器时,它将重新计算。 “视图框架”是什么意思 例如,对于您的图像视图,我很好奇您是否在任何地方以编程方式设置其框架。在 iOS 7 中,内容现在位于导航栏下方,因此依赖于将框架设置为 0,0 或 0,44 的 x,y 的人们在很多情况下会发现他们的视图错位了 44 个点。 添加你在过渡期间做什么的代码。此外,添加有关如何制作视图层次结构的详细信息。模拟指标没有帮助,因为它们仅应用于故事板界面而不是应用程序(这就是它们被称为“模拟”的原因) 谢谢大家...忙于 T-Day 的事情,我不在我的 Mac 上。今晚将使用特定代码和上述问题的答案编辑问题。 【参考方案1】:

您可以尝试将 UIViewController 上的新属性 edgesForExtendedLayout 设置为 UIRectEdgeNone

这是一个很好的资源,它详细解释了 iOS 7 中视图布局的变化。

See Apple Documentation

如果您打算向后兼容,如果设备未运行 iOS 7,您可能需要进行一些运行时检查并调整定位。

【讨论】:

这是针对 iOS7 目标的,所以我不需要做那个检查。【参考方案2】:

这可能会对您有所帮助..您可以尝试在 info.plist 中添加 UIViewControllerBasedStatusBarAppearance 键并将其值设置为 NO

UIViewControllerBasedStatusBarAppearance = NO

【讨论】:

以上是关于IOS7:Pop ViewController 强制 UIImageView 掉落的主要内容,如果未能解决你的问题,请参考以下文章

UIButton 没有在 iOS7 的 UIPageViewController 中的 ViewController 中突出显示

ios 7中的UI Popover ViewController?

关闭 ViewController 后,我的视图保持在 iOS7 中以前的视图控制器方向

从该音频ViewController IOS7返回后如何停止音频

关闭从 UIDocumentInteractionController 打开的 iOS 邮件应用程序会删除 iOS7 中呈现的 ViewController 的视图

将 Push ViewController 动画更改为看起来像“pop”动画,从左到右进入