iOS 7 TableView在ViewController和NavigationBar模糊效果中

lda*_*vin 10 uitableview ios autolayout ios7

我开始在我的应用程序中使用故事板中的TableViewController构建TableView.当您执行此操作时,向下滚动列表时会产生非常酷的效果:在导航栏后面移动的单元格会变得模糊.

一段时间后,我不得不从这个TableViewController转移到一个带有TableView的ViewController(我不得不在表底部添加其他视图).

为了避免导航栏隐藏第一个单元格(在它上面),我在顶部和底部布局指南以及视图的左右边缘添加了约束.

这很好用,但是我失去了很酷的模糊滚动效果:在进入导航栏后,细胞似乎消失了.

我已经看到了人们不使用约束并在界面构建器中添加幻数的变通方法.我不能这样做,首先是因为我不喜欢它,其次是因为我必须兼容iOS 6.

我错过了什么能够从模糊的导航栏效果再次受益?

Ale*_*olo 11

您必须手动调整contentInset表格视图并确保表格视图框架原点为0,0.这样,表格视图将位于导航栏下方,但内容和滚动视图边缘之间会有一些边距(内容向下移动).

我建议你使用topLayoutGuide视图控制器的属性来设置正确的contentInsets,而不是硬编码64(状态栏+导航栏).还有bottomLayoutGuide,你应该使用UITapBars的情况.

这是一些示例代码(viewDidLoad应该没问题):

// Set edge insets
CGFloat topLayoutGuide = self.topLayoutGuide.length;
tableView.contentInset = UIEdgeInsetsMake(topLayoutGuide, 0, 0, 0);
Run Code Online (Sandbox Code Playgroud)

顺便说一句,这些属性UIViewController可能对你有所帮助(你不应该更改它们的默认值,但我不知道你的视图层次结构是什么):

  • automaticallyAdjustsScrollViewInsets
  • edgesForExtendedLayout
  • extendedLayoutIncludesOpaqueBars


dar*_*iaa 1

UIViewController 属性edgesForExtendedLayout可以解决这个问题。如果您使用故事板,只需确保Extended Edges Under Top Bars已打开(默认情况下)。如果您以编程方式创建视图控制器,请尝试以下操作:

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.edgesForExtendedLayout = UIRectEdgeAll;
}
Run Code Online (Sandbox Code Playgroud)

当然,您的表视图需要具有适当的自动调整大小掩码/布局约束