我开始在 Storyboard中使用 TableViewController 在我的应用中构建 TableView。执行此操作时,当您向下滚动列表时会产生非常酷的效果:移动到导航栏后面的单元格变得模糊。
一段时间后,我不得不从这个 TableViewController 转移到一个内部有 TableView 的 ViewController(我不得不在表格底部添加其他 View )。
为了避免第一个单元格被导航栏隐藏(在其上方),我向顶部和底部布局指南以及 View 的左右边缘添加了约束。
这很好用,但我失去了很酷的模糊滚动效果:单元格似乎在导航栏后面消失了。
我见过人们不使用约束并在界面生成器中放置魔数(Magic Number)的变通方法。我不能这样做,首先是因为我不喜欢它,其次是因为我必须兼容 iOS 6。
为了能够再次从模糊的导航栏效果中获益,我错过了什么?
最佳答案
您必须手动调整表格 View 的 contentInset
并确保表格 View 框架原点为 0, 0。
通过这种方式,表格 View 将位于导航栏下方,但内容和 ScrollView 边缘之间会有一些空白(内容向下移动)。
我建议您使用 View Controller 的 topLayoutGuide
属性来设置正确的 contentInsets
,而不是硬编码 64(状态栏 + 导航栏)。
还有 bottomLayoutGuide
,您应该在 UITapBar
的情况下使用它。
下面是一些示例代码(viewDidLoad
应该没问题):
// Set edge insets
CGFloat topLayoutGuide = self.topLayoutGuide.length;
tableView.contentInset = UIEdgeInsetsMake(topLayoutGuide, 0, 0, 0);
顺便说一句,UIViewController
的这个属性可能对您有帮助(您不需要更改它们的默认值,但我不知道您的 View 层次结构是什么):
automaticallyAdjustsScrollViewInsets
edgesForExtendedLayout
extendedLayoutIncludesOpaqueBars
关于iOS 7 TableView 在 ViewController 和 NavigationBar 中的模糊效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19299481/