iOS开发也有段时间了,但是对automaticallyAdjustsScrollViewInsets和translucent混合使用还是有一些不清晰,今天我带大家一起来实践、学习,有疑问请回复哦。
private func hideNavigationBar(showBgImage: Bool) {
// automaticallyAdjustsScrollViewInsets = false
// navigationController?.navigationBar.translucent = true
// navigationController?.tabBarController?.tabBar.translucent = false
}
下面我说一下demo的主体:UITabBarController上有四个item,子控制器都是用UINavigationController做容器,我在其中一个里面添加了UITableView,设置frame和父View的一直现在我们开始测试
automaticallyAdjustsScrollViewInsets默认是true打开,
navigationController?.navigationBar.translucent在iOS7之前默认是false,在iOS7以及之后是默认true
log:window.frame:(0.0, 0.0, 414.0, 736.0)
view.frame:(0.0, 0.0, 414.0, 736.0)
tableView.frame:(0.0, 0.0, 414.0, 736.0)
说明控制器的起始原点是在导航条左下方(0, 64.0)、终点实在tabBar的右上方(414.0, 687.0)。这个时候滚动视图会发现tableView的高度没有672.0是完美适配的,tableView的高度相当于(总高度-导航条高度-tabbar高度)这个就是automaticallyAdjustsScrollViewInsets自动适配的效果
private func hideNavigationBar(showBgImage: Bool) {
automaticallyAdjustsScrollViewInsets = false
// navigationController?.navigationBar.translucent = true
// navigationController?.tabBarController?.tabBar.translucent = false
}
log:
window.frame:(0.0, 0.0, 414.0, 736.0)
view.frame:(0.0, 0.0, 414.0, 736.0)
tableView.frame:(0.0, 0.0, 414.0, 736.0)
他们的实际frame值都没有改变但是显示出的UI却不一样,tableView不在是完美适配,会出现cell展示不全的情况,tableView的一部分和底部tabBar重叠。
private func hideNavigationBar(showBgImage: Bool) {
automaticallyAdjustsScrollViewInsets = false
navigationController?.navigationBar.translucent = true
// navigationController?.tabBarController?.tabBar.translucent = false
}
log:
window.frame:(0.0, 0.0, 414.0, 736.0)
view.frame:(0.0, 0.0, 414.0, 736.0)
tableView.frame:(0.0, 0.0, 414.0, 736.0)
private func hideNavigationBar(showBgImage: Bool) {
automaticallyAdjustsScrollViewInsets = false
navigationController?.navigationBar.translucent = true
navigationController?.tabBarController?.tabBar.translucent = false
}
log:
window.frame:(0.0, 0.0, 414.0, 736.0)
view.frame:(0.0, 0.0, 414.0, 687.0)
tableView.frame:(0.0, 0.0, 414.0, 687.0)
translucent在iOS7之前默认为false,iOS7以及之后默认为true,这个属性有两个功能:1设置导航条(nav,tabbar)为半透明状态;2.修改当前控制器根容器下的屏幕起始原点
根据上面的例子说明在automaticallyAdjustsScrollViewInsets打开的时候,就算scrollview的frame设置的有问题也可以完成适配。