在开始之前,请不要拍摄信使 - 这是客户要求的功能,因此在这种情况下关于UX的更高级别权利和错误的讨论可能不会有太大帮助。 / p>
无论如何,我的困境如下。我有一个包含许多项目的垂直UIStackView,每个项目都有自己的子视图集合。
此垂直UIStackView中的顶部项目包含一个水平分页UIScrollView,其上添加了一个水平UIStackView,其中包含许多不同高度的项目。
现在因为水平UIStackView包含不同高度的项目,当它包含UIScrollView向左和向右滚动时,从而将新项目带到屏幕上(并且滑动之前的项目)UIStackView和父UIScrollView的高度NSLayoutConstraint需要更改为适应。这样可以确保此顶部项目下方的所有垂直UIStackView项目都会自动向下滑动(并备份)到所需位置。
这个动态调整大小都是在顶部项目的UIScrollView的scrollViewDidScroll中完成的。
不管你信不信这确实都有效,只有一个问题:当需要调整大小时,我会得到UIScrollView滞后。如果不需要调整大小,我不会。
现在从证据看起来自动布局,UIStackViews和scrollViewDidScroll在调整大小时不能很好地协同工作,我也认为这与垂直UIStackView调用所有子节点上的layoutSubviews有关。 scrollViewDidScroll的每一帧实际上都会改变顶部项目的高度。如果我删除除包含UIScrollView +水平UIStackView的顶部项目之外的所有UIStackView项目,则在调整大小时滚动是无缝的。另外,如果我将调整大小放入一次调用的scrollViewDidScroll中的动画块中,它将再次无缝。
所以问题是,过去有没有人遇到类似的事情并找到解决办法?有什么我想念的吗?有谁知道在这种情况下是否可以以某种方式阻止或阻止UIStackView layoutSubviews调用?由于删除autolayout和UIStackViews的使用可能会产生一些巨大而昂贵的后果,因此非常受欢迎。