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

前端之家收集整理的这篇文章主要介绍了当UITableViewController frame.height很小时,ios – UITableViewController 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 itself

Scroll bounds = {{0,-128.333333]
Scroll position jumps the other direction by the same amount
Scroll bounds = {{0,-151.33333333333334},-151.333333]

Value changed target action fires. Bounds seem to reset (think 44 is height of refresh control

Scroll bounds = {{0,-44},-44.000000]
Corrects back
Scroll 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%更小,因此在边框周围有一个边距.将刻度更改为更改边框大小.

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

猜你在找的iOS相关文章