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

时间:2014-04-27 18:05:54

标签: ios objective-c ios7 uinavigationbar

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

self.navigationController.navigationBar.translucent = YES;

UIImageView位于导航栏下方,正如我所希望的那样。不幸的是UITableView也是如此。我想将UITableView放在导航栏的底部,将UIImageView留在下面。如果我设置:

[self setEdgesForExtendedLayout:UIRectEdgeBottom]

然后UITableView位于导航栏的底部,但UIImageView也是如此。将UIImageView留在导航栏下方并按下导航栏底部的UITableView,最简单的解决方案是什么?

1 个答案:

答案 0 :(得分:3)

默认情况下,在iOS 7中,内容会延伸到屏幕的顶部和底部,位于任何导航栏,工具栏或标签栏下方。如果要将表视图的框架设置为在导航栏后面开始,则表格视图的内容不会在导航栏下滚动,从而提供漂亮的模糊效果。

您可能想要做的是将表格视图的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;