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

Ios 在导航栏下方设置图像视图,ios,objective-c,ios7,uinavigationbar,Ios,Objective C,Ios7,Uinavigationbar,在我的UIViewController中,我有一个UIImageView,它占据了控制器(屏幕)的全部尺寸并用作背景。在UIImageView之上,我有一个背景清晰的UITableView。我将导航栏设置为半透明,如下所示: self.navigationController.navigationBar.translucent = YES; UIImageView位于导航栏下方,如我所愿。不幸的是,UITableView也发生了同样的情况。我想把UITableView放在导航栏的底部,把UII

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

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

[self setEdgesForExtendedLayout:UIRectEdgeBottom]

然后
UITableView
位于导航栏的底部,但
UIImageView
也会出现同样的情况。将
UIImageView
放在导航栏下方并按下导航栏底部的
UITableView
最简单的解决方案是什么

默认情况下,在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;
编辑:啊,差点忘了。您还需要更改ScrollIndicationSet以匹配contentInset,这样您的滚动条就不会移到屏幕外

myTableView.scrollIndicatorInsets = myTableView.contentInset;

为什么不能简单地为tableView设置原点,比如:
frame.origin.y=64;tableView.frame=frame?是否使用自动布局?如果是这样,只需为UIImageView和UITableView添加一些约束。谢谢您的回答。更改表格框架对我来说不是一个解决方案,因为当表格视图内容滚动时,它不会位于半透明导航栏的下方。尽管导航栏会选择最近的单元格,并尝试绘制其中的一些内容,模拟内容在下面(当表格视图框架全屏显示时,情况不同)。更改contentInset效果很好,但您还需要将ScrollIndicationSet更改为与contentInset相同的边缘插入。否则,滚动条将位于导航栏下方。如果你更新你的答案,我会接受的。啊,是的,对不起,我忘了提那个。更新!