原理:
如果某个 UIViewController 的 self.view 的第一个子视图是 UIScrollView 类型的话, 这个 UIViewController 被 push 到 UINavigationController 中 或者 initWithRootController 成为UINavigationController 控制的 Controller 时,
这个UIViewController 的 view 的子视图UIScrollView中的所有子视图, 都将会下移64px (状态栏20px + 导航栏44px)
出现问题
- 当 self.view 和 tableview 之间还有个 view 就会造成内容向上偏移 64px
解决方法 :- topLayoutGuide: topLayoutGuide属性表示不希望被透明的状态栏或导航栏遮挡的内容范围的最高位置。这个值可能由当前的 VC 或这个 VC 所属的NavigationController或TabBarController决定
v.snp.makeConstraints { (make) in make.top.equalTo(self.topLayoutGuide.snp.bottom) make.leading.trailing.bottom.equalTo(view) }
- 导航栏的透明度: 如果导航栏不透明,那么位于UINavigationController的栈中的UIViewController的view的frame将会更新为(0, 64, ScreenWidth, ScreenHeight-64)
self.navigationController?.navigationBar.isTranslucent = false
网友评论