请合理使用API(记录一个问题排查过程)

2024-11-26  本文已影响0人  Harry_Coding

合理使用API很重要(记录一个问题排查过程)

前言

你永远不知道,可能是你随便添加的一行代码,对后续的开发造成了多大的麻烦,甚至上升到了怀疑原生设计者的bug。所以请谨慎添加代码,并且了解你添加代码之后的影响范围;如果是局部可控的那最好,如果是全局不可控的,我建议你最好别添加,因为别的地方的开发出现问题根本联想不到是你这里出现的问题,这真的是坑死后人。

起因

最近因为同事开发的下拉显示二楼架构不合理,导致出现必现且不改架构无法解决的问题,我来接手重新架构,保证架构的合理性、可维护性。

架构如何不合理,新架构又是如何架构,不是本次的重点,就不再这里赘述。

这次主要一下,之后出现的奇怪现象。

当下滑到某个位置后松手,需要整个tableView做个动画向下位移,移出屏幕。展示背景view,且实现转场到二楼页面。

但是奇怪的事情就此发生了:

1. 当我去修改contentInset.top为screenHeight且 设置contentOffset 为(0, -screenHeight), 即滚动到屏幕下沿。莫名的会先达到最下沿,然后回弹一段距离。

2.当个人中心的页面切回首页后,tableView 会自动调整 contentInset 顶部增加44, 底部增加一段距离

3.不同设备首次进入首页,会自动向下便宜44的距离

排查

破迷

难道真的是tableView的bug?难道说是contentInsetAdjustmentBehavior 失效了?

OK,那么我在viewWillAppear里重新设置下:

public override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
        tableView.contentInsetAdjustmentBehavior = .never
 }

奇迹发生了,没问题了。

难道说真的是系统出现问题了?系统会再次进入的时候打开了自动调整contentInset?说不通啊,要是这样的话那么早有问题了

我仔细回想了,前前后后发生的现象,问题2-个人中心tab切回首页Tab,会出现自动便宜,那么他们之间又有什么关系呢?

会不是首页不知道的地方打开了contentInsetAdjustmentBehavior?

全局搜一下?一搜谜团终于解开了:

在个人中心的页面发现了一行代码

- (void)setupUI {
    [UIScrollView appearance].contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentAutomatic;
    ...   
}

OMG? 怎么能在这全局打开自动调整contentInset的属性呢?

好了,谜团解开了,前人挖坑后人填,在个人中心里添加了全局修改scrollView的contentInsetAdjustmentBehavior 为自动调整,

首页是比个人中心加载快的,也就是说,当首页将自己的tableView设置为never后,在个人中心页面加载的时候将全局设置为auto,相当于重新打开,那tableView不自动调整才怪...

结语

我思前想后,前人在这加这个的动机是什么?如果你想全局设置也不应该在这,最起码得在最显眼的地方比如AppDelegate,但是我不建议设置。那么我觉得只有一种动机,他刚好在哪看到了这个API,觉得很新颖,尝试一下,并没有了解他背后的影响力是全局的。所以奉劝一些不太成熟的开发者,不光使用API,最好是了解其背后的含义以及影响,你偶尔增加的一行代码,会给后续的开发者带来极大痛苦。

上一篇 下一篇

猜你喜欢

热点阅读