美文网首页
滚动视图的contentInsetAdjustmentBehav

滚动视图的contentInsetAdjustmentBehav

作者: ImmortalSummer | 来源:发表于2021-09-18 18:04 被阅读0次

滚动视图(UIScrollView UITableView UICollectionView等)都有一个contentInsetAdjustmentBehavior属性。 这里通过测试,描述一下这个属性的作用。

先说总结

滚动视图在被tabbar遮住的时候,系统默认会修改滚动视图的contentInset属性,使滚动视图最底部的内容避开tabbar的遮挡。如果用户设置滚动视图的contentInsetAdjustmentBehavior属性为.never,则系统不会再做相关处理,滚动视图的最底部内容会被tabbar遮挡。
不过,当contentInsetAdjustmentBehavior属性为.never时,开发者可以自己修改contentInset属性。
但是当contentInsetAdjustmentBehavior属性为默认值时,开发者自己修改contentInset属性时,会被系统干预,自动叠加遮挡的部分的高度。

举例说明

首页HomeViewController 有一个tableView视图,HomeViewController显示底部导航栏(Tabbar,系统高度是49)
tableView的布局如下:

self.tableView.frame = self.view.bounds

这时候,tableView的底部是在tabbar的后边的,也就是说tableView是被tabbar挡住的, 但是实际上我们的tableView的内容并没有被遮挡,这是因为系统自动做了处理,设置了tableView的contentInset属性。

<UIView: 0x10fd23f00; frame = (0 64; 414 672); >

<UITableView: 0x110036c00; frame = (0 0; 414 672); 
contentOffset: {0, 0}; 
contentSize: {414, 1000}; 
adjustedContentInset: {0, 0, 49, 0}; >
如果此时我们主动设置contentInset属性会怎么样呢?

self.tableView.contentInset = .init(top: 0, left: 0, bottom: 64, right: 0)
之后底部inset为64后我们再次打印,结果很明显我们设置的64和之前的49叠加了,变成了113:

<UIView: 0x10fd23f00; frame = (0 64; 414 672); >

<UITableView: 0x110036c00; frame = (0 0; 414 672); 
contentOffset: {0, 0}; 
contentSize: {414, 1000}; 
adjustedContentInset: {0, 0, 113, 0}; >
如果tableView没有被tabbar完全遮挡呢?

self.tableView.height = self.view.height-20

打印结果可以看到,偏移量只是被遮挡住的部分(29=49-20)

<UIView: 0x10fd23f00; frame = (0 64; 414 672); >

<UITableView: 0x110036c00; frame = (0 0; 414 672); 
contentOffset: {0, 0}; 
contentSize: {414, 1000}; 
adjustedContentInset: {0, 0, 29, 0}; >
如果我们想要自己准确设置contentInset属性或者就想要tabbar遮挡呢?

我们需要执行:
self.tableView.contentInsetAdjustmentBehavior = .never

执行后:

<UIView: 0x10fd23f00; frame = (0 64; 414 672); >

<UITableView: 0x110036c00; frame = (0 0; 414 672); 
contentOffset: {0, 0}; 
contentSize: {414, 1000}; 
adjustedContentInset: {0, 0, 0, 0}; >
如果此时我们再次主动设置contentInset属性会怎么样呢?

self.tableView.contentInsetAdjustmentBehavior = .never
self.tableView.contentInset = .init(top: 0, left: 0, bottom: 64, right: 0)

打印结果:

<UIView: 0x10fd23f00; frame = (0 64; 414 672); >

<UITableView: 0x110036c00; frame = (0 0; 414 672); 
contentOffset: {0, 0}; 
contentSize: {414, 1000}; 
adjustedContentInset: {0, 0, 64, 0}; >

相关文章

网友评论

      本文标题:滚动视图的contentInsetAdjustmentBehav

      本文链接:https://www.haomeiwen.com/subject/dsdygltx.html