当UITableViewController frame.height很小时,ios – UITableViewController refreshControl会出现故障

当UITableViewController frame.height很小时,ios – UITableViewController refreshControl会出现故障,第1张

概述我有一个问题,这源自UITableViewController refreshControl在UITableViewController的框架低于某一高度时是毛刺的事实. 就这样,我有一个UIViewController,在其中我有一个ContainerView嵌入一个UITableViewController.我想要的高度是屏幕的50%. 当我使用refreshControl时,我得到这样的行为 我有一个问题,这源自UItableVIEwController refreshControl在UItableVIEwController的框架低于某一高度时是毛刺的事实.

就这样,我有一个UIVIEwController,在其中我有一个ContainerVIEw嵌入一个UItableVIEwController.我想要的高度是屏幕的50%.

当我使用refreshControl时,我得到这样的行为:The tableView jumps down at the very end when scrolling down. You’ll notice it towards the end of this video when I decide to scroll down slowly.

当ContainerVIEw框架高于某个值时,不会发生此问题.所以,当高度是屏幕的75%时,一切都可以完美地实现,并且refreshControl很顺利.当它是50%时,那个BUG就会发生.

我试过的两件事情

> self.tableVIEw.frame = CGRectMake(0,numOfPixelsToDroptableBy,self.tableVIEw.frame.size.wIDth,self.tableVIEw.frame.size.height)是我尝试的一件事.这样做的问题是如果要通过ContainerVIEw给出tableVIEw圆角,并且事实上,您的ContainerVIEw仍然占用更多的空间,这会使其他元素的约束变得尴尬.
>我去了故事板,我基本上是我想要的ContainerVIEw的顶部.然后,我的底部扩展到屏幕底部,给了ContainerVIEw足够大的高度,但用户永远不会知道.除了他们会知道,因为现在tableVIEw延伸到屏幕之外,我看不到我的tableVIEw的最后几行.

最终…我不想使用第三方库,但我想要一个完美的功能refreshControl.如何解决这个问题?

解决方法 我设法重创了你的问题,意外地设法解决了这个问题,但费用是没有任何利润.

如果您使用基于边界的约束或您的容器视图的任何种类的边距,跳跃似乎就会发生.如果删除边界相对于约束的一部分,则跳跃消失.

很奇怪,但似乎是问题.一旦为容器添加任何边距相对约束,问题就会返回.将其移除并显示回到平滑滚动.

这似乎是一个错误,我认为你将需要提出一个与苹果的错误报告.

更新:

再看一遍,一旦容器视图不是屏幕的整个宽度,问题似乎就会出现.向容器视图添加任何类型的边距(通过相对于边距的布局或通过在约束上设置非零偏移)导致跳跃行为.

更新:

UItableVIEw在容器视图内滚动显示的东西似乎有根本的区别,容器视图有任何边缘.如果您覆盖滚动委托,滚动视图的内容偏移/边界将在刷新即将触发的时刻更改.这是一些调试显示问题

Start pulling down:Scroll bounds = {{0,-127.33333333333333},{374,423}}Scroll pos = [0.000000,-127.333333]Scroll bounds = {{0,-127.66666666666667},-127.666667]Scroll bounds = {{0,-128.33333333333334},-128.333333]Ok before here ------->Activity spinner becomes fully populated. Jump in scroll position upwards.Scroll bounds = {{0,-104},-104.000000]Scroll position corrects itselfScroll bounds = {{0,-128.333333]Scroll position jumps the other direction by the same amountScroll bounds = {{0,-151.33333333333334},-151.333333]Value changed target action fires. Bounds seem to reset (think 44 is height of refresh controlScroll bounds = {{0,-44},-44.000000]Corrects backScroll bounds = {{0,-151.333333]Fully corrects to the right scroll position by jumPing back.Ok after here ------>Scroll bounds = {{0,-128.66666666666666},-128.666667]Scroll bounds = {{0,-129},-129.000000]Scroll bounds = {{0,-129.33333333333334},-129.333333]Scroll bounds = {{0,-129.66666666666666},-129.666667]Scroll bounds = {{0,-130},423}}

结论

似乎没有简单的方法可以找到解决这个问题.我试图创建我自己的表视图控制器,跳跃消失,但被不同的效果所替代:当您向下滚动顶部单元格消失时,然后重新出现.我想象它与同样的内部问题有关,只是表达不同.

不幸的是,你可能不得不忍受这种效果,或者没有余地.我会提出一个与苹果的错误报告.

只有其他选项才能在您的UItableVIEwCells中创建边距.您可以使单元格内容视图具有清晰的背景,并使用内部容器视图为单元格内容向单元格引入左右边距.我认为这可能是你最好的机会.

最后…

不要被击败,您可以将缩放变换应用于表视图的导航控制器,以在表视图控制器中创建一个执行以下 *** 作的余量:

overrIDe func vIEwWillAppear(animated: Bool) {  super.vIEwWillAppear(animated)  // Add a scaling transform to the whole embedded controller vIEw.        self.navigationController!.vIEw.transform=CGAffinetransformMakeScale(0.9,0.9);}

这使得嵌入式控制器的视图看起来比90%更小,因此在边框周围有一个边距.将刻度更改为更改边框大小.

不理想,但完美无瑕,无跳转,有边框.它也使您完全免费使用圆角等,因为整个内容被缩放.

总结

以上是内存溢出为你收集整理的当UITableViewController frame.height很小时,ios – UITableViewController refreshControl会出现故障全部内容,希望文章能够帮你解决当UITableViewController frame.height很小时,ios – UITableViewController refreshControl会出现故障所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/web/1112724.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存