UINavigationViewController中的UITableView偏移,显示在UINavigationBar下

Posted

技术标签:

【中文标题】UINavigationViewController中的UITableView偏移,显示在UINavigationBar下【英文标题】:UITableView offset in UINavigationViewController, displayed under UINavigationBar 【发布时间】:2013-09-03 23:12:29 【问题描述】:

ios 6 上,我试图重现 Facebook 应用程序的左右侧菜单。我在同一个窗口上添加了 2 个视图控制器,它们各自的视图都添加到了(只有一个在另一个下面)。我的辅助控制器是嵌入在 UINavigationViewController(名为“幻灯片菜单”)中的 UITableViewController,宽度为 300 pts -- frame : (0, 0, 300, 480)。

来回切换到侧边菜单执行得非常好,但是我在那个辅助视图上有一个棘手的问题,如果我推送一个视图(图片上的绿色视图)并弹出它,我的表格视图就会如下所示导航栏 20 pts...我仔细检查了它,它是 table view 的 superview,它不是从 64pts(在 y 原点)开始,而是从 44pts 开始。

真正有趣的是,使用完全相同的代码,但只需将辅助视图控制器的框架从 (0, 0, 300, 480) 更改为 (0, 0, 320, 480) 即可解决问题!但是,任何与 320、480 不同的大小都会导致此问题...

http://d.pr/i/RNr4

谢谢

【问题讨论】:

【参考方案1】:

你试过这个吗? tableView.autoresizingMask = UIViewAutoresizingFlexibleHeight;

【讨论】:

【参考方案2】:

在解决这个问题数小时后,我无法直接解决它。将 UIView(由 UIViewController 管理)直接附加到 UIWindow 似乎是一个糟糕的主意。我怀疑框架正在检查视图的大小,如果它不等于屏幕的大小(换句话说,如果它不是“全屏”),那么它会在视图上启动重新布局过程。这里的问题更像是 UIViewController 没有关于状态栏的信息,所以重新布局过程以某种方式搞砸了......

无论如何,做这个效果的正确解决方案是使用一个 UIViewController 和 2 个子视图控制器。一个是幻灯片菜单,第二个是主视图。因为它们都将被正确添加到视图层次结构中,所以它们将具有关于状态栏等的正确信息。

【讨论】:

以上是关于UINavigationViewController中的UITableView偏移,显示在UINavigationBar下的主要内容,如果未能解决你的问题,请参考以下文章