Tencent / QMUI_iOS

QMUI iOS——致力于提高项目 UI 开发效率的解决方案
http://qmuiteam.com/ios
Other
7.05k stars 1.37k forks source link

QMUICommonTableViewController中emptyView的布局问题 #1366

Closed fanyuecheng closed 2 years ago

fanyuecheng commented 2 years ago

截屏2022-01-13 17 18 49

当前emptyView无法完全盖住tableView,因为emptyView的height为 CGRectGetHeight(self.tableView.bounds) - UIEdgeInsetsGetVerticalValue(self.tableView.adjustedContentInset) 。 我认为若当前QMUICommonTableViewController的qmui_tabBarSpacingInViewCoordinator为不为0时,现有逻辑是对的,但该值为0,则不需要考虑safeArea的bottom,故emptyView的height应该为 CGRectGetHeight(self.tableView.bounds) - UIEdgeInsetsGetVerticalValue(self.tableView.adjustedContentInset.top)即可 。

MoLice commented 2 years ago

如果按你说的改,应该会在显示 emptyView 时列表可以滚动吧?

fanyuecheng commented 2 years ago

emptyView加到tableView上肯定是可以滚动的啊 当然当请求数据的时候,若能滚动,则禁止就好,这里不讨论 我的意思是指,假如,controller的view的backgroundColor非白色非透明,emptyView的backgroundColor是白色,这时候showEmpty,emptyView则挡不住view,会露出view的背景色,这种情况只能自己业务里,自己改layoutEmptyView?

MoLice commented 2 years ago

emptyView加到tableView上肯定是可以滚动的啊 当然当请求数据的时候,若能滚动,则禁止就好,这里不讨论 我的意思是指,假如,controller的view的backgroundColor非白色非透明,emptyView的backgroundColor是白色,这时候showEmpty,emptyView则挡不住view,会露出view的背景色,这种情况只能自己业务里,自己改layoutEmptyView?

是的。

为什么会有这种露出来一点点的问题,是因为 QMUI 的预期是希望数据空的时候不可滚动(因为此时不需要让用户知道“我当前正处在一个列表里”,滚动也带有“屏幕外还有更多其他信息”的暗示,在我们看来这都不符合用户的预期),所以才会特地让 emptyView 的 maxY 在 inset 之上。

至于露出来背后的颜色,则是为了保障上文诉求的情况下带来的弊端,在前后颜色一致时没问题,但前后颜色不一致时确实会比较麻烦,目前我们认为利大于弊。

在前后颜色不一致时因此带来的额外适配工作量,我们再考虑一下能否兼顾。在 QMUI 实现不改的情况下,业务目前要么自己改 layoutEmptyView,要么自己改背后的颜色。