在导航栏下方设置图像视图

Posted

技术标签:

【中文标题】在导航栏下方设置图像视图【英文标题】:Set image view underneath the navigation bar 【发布时间】:2014-04-27 18:05:54 【问题描述】:

在我的UIViewController 中,UIImageView 占据了控制器(屏幕)的整个大小并用作背景。在 UIImageView 之上,我有一个背景清晰的UITableView。我将导航栏设置为半透明,如下所示:

self.navigationController.navigationBar.translucent = YES;

UIImageView 如我所愿,位于导航栏下方。不幸的是,UITableView 也发生了同样的情况。我想把UITableView放在导航栏的底部,把UIImageView放在下面。如果我设置:

[self setEdgesForExtendedLayout:UIRectEdgeBottom]

然后UITableView 位于导航栏的底部,但同样的情况也发生在UIImageView 上。将UIImageView 留在导航栏下方并按下导航栏底部的UITableView 最简单的解决方案是什么?

【问题讨论】:

为什么不能简单地为 tableView 设置原点,例如:frame.origin.y = 64; tableView.frame = frame; 您在使用自动布局吗?如果是这样,只需为 UIImageView 和 UITableView 添加一些约束即可。 【参考方案1】:

默认情况下,在 ios 7 中,内容会延伸到屏幕的顶部和底部,位于任何导航栏、工具栏或标签栏的下方。如果您将 table view 的 frame 设置为在导航栏之后开始,则 table view 的内容将不会在导航栏下方滚动,从而提供很好的模糊效果。

您可能想要做的是将表格视图的 y 原点保持在 0,在导航栏下方,并设置内容插入,以便内容在导航栏之后开始。

这很简单。如果您使用自动布局,视图控制器的顶部布局指南将识别状态栏和导航栏的高度,因此您无需自己计算。导航栏的底部应以 66 结束。

//Using Auto Layout
CGFloat navigationBarHeight = self.topLayoutGuide.length;

//Not using Auto Layout
UINavigationBar *nav = self.navigationController.navigationBar;
CGFloat navigationBarHeight = nav.frame.origin.y + nav.frame.size.height;

myTableView.contentInset = UIEdgeInsetsMake(navigationBarHeight, 0, 0, 0)

当然,如果你真的希望框架在导航栏之后开始,上面的高度保持不变,你只需要手动设置表格视图的框架。

CGRect tableViewFrame = self.view.bounds;
tableViewFrame.origin = CGPointMake(tableViewFrame.origin.x, navigationBarHeight);
tableViewFrame.size = CGSizeMake(tableViewFrame.size.width, tableViewFrame.size.height - navigationBarHeight*2);
myTableView.frame = tableViewFrame;

编辑:啊,差点忘了。您还需要更改 scrollIndicatorInsets 以匹配 contentInset,这样您的滚动条就不会移出屏幕。

myTableView.scrollIndicatorInsets = myTableView.contentInset;

【讨论】:

感谢您的回答。更改表格框架对我来说不是一个解决方案,因为当表格视图内容滚动时,它不会位于半透明导航栏下方。虽然导航栏会选择最近的单元格并尝试绘制一些模拟内容在下面的内容(当表格视图框架全屏时不一样)。更改 contentInset 效果很好,但您还需要将 scrollIndicatorInsets 更改为与 contentInset 相同的边缘插图。否则滚动条将位于导航栏下方。如果你更新你的答案,我会接受。 啊,是的,对不起,我忘了提。更新了!

以上是关于在导航栏下方设置图像视图的主要内容,如果未能解决你的问题,请参考以下文章

Swift iOS以编程方式在导航栏下方设置scrollView约束

更改导航栏背景图像导致视图向上移动

iOS Autolayout - 在半透明导航栏下方正确定位视图

导航栏按钮单击事件在单击其下方区域时触发。

如何在导航栏下方加载 UIWebView 直到 StatusBar

如何移动导航栏图像?