在我的UIViewController
我UIImageView
占据控制器(屏幕)的全部大小并作为背景。在UIImageView之上,我有一个UITableView
,背景清晰。我将导航栏设置为半透明,如下所示:
self.navigationController.navigationBar.translucent = YES;
UIImageView
位于导航栏下方,正如我所希望的那样。不幸的是UITableView
也是如此。我想将UITableView
放在导航栏的底部,将UIImageView
留在下面。如果我设置:
[self setEdgesForExtendedLayout:UIRectEdgeBottom]
然后UITableView
位于导航栏的底部,但UIImageView
也是如此。将UIImageView
留在导航栏下方并按下导航栏底部的UITableView
,最简单的解决方案是什么?
答案 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;