2017-07-06 52 views
3

假设有其示出了消息的表视图T,使一个UITableView“粘在底部”

T[ message d 
T[ message c 
T[ message b 
T[ most recent message down bottom 

说有100条消息,与本例中的底部4中可见。

所以表视图的高度是700说。您在下面有一个典型的文本条目...

T[ message d 
T[ message c 
T[ message b 
T[ most recent message down bottom 
[enter snapped chat message!] [send] 

当键盘出现时,可见表视图的新高度为400说。

当然,这将“消除信息的底部” - 最近的两个将不再可见。

T[ message d 
T[ message c 
[enter snapped chat message!] [send] 
[   iOS keyboard  ] 
[   iOS keyboard  ] 

(因此,消息A和B是现在键盘上的“下”)。

自然出现后的键盘,比如你做的是刚刚滚动表。没有问题以特别的方式进行。

然而,这将是非常自然的,如果能以这样的方式,作为可视面积的大小变化,表视图知道保持“底部点”相同子类的UITableView。

因此,随着表底部的上下移动(由于键盘出现 - 或任何原因),表格会根据表格的“底座”移动而实际滚动。

(二话不说,这将解决“匹配动画计时”滋扰。)

难道这是优雅的实现,如果又如何 - 这确实会显得如此自然,这些天,也许它的内置以UITableView作为标志,我只是不知道?

再次这里的问题是

如何修改的UITableView,以便它使自己的滚动位置,如,视图大小的变化...

(以保持“底点相同“)

请注意,仅从”外部“滚动表格”手动“就是微不足道的。

+0

令人着迷的是,只有**没有办法做到这一点**。 mag_zbc有惊人的“诀窍”,它使它发生(真棒)。但奇怪的是,在iOS中没有自然的方法。 – Fattie

回答

2

节头粘在上面,所以也许是这样的:
1.最近的消息一节头视图2,而不是表格单元格
2。镜像表视图垂直:
tableView.transform = CGAffineTransformMakeScale(1, -1);
3.垂直镜像节头和表单元格
4.反向邮件

的顺序是你在找什么?

+0

Dude *** ***镜像的想法***是今天最大胆的想法!圣洁的废话人!!!!!! – Fattie

+0

请注意,您不需要对部分进行任何操作(我认为)。它会保持“顶级”自然(我认为!)神圣的废话! – Fattie

+1

这是实现这一目标的最佳方式,并且有一个库可以完成所有工作:https://github.com/marty-suzuki/ReverseExtension – Dean

0

据我所知,你有这样几个选择:

如果你有行的indexPath你想成为可见:

tableView.ScrollToRow(indexPath, UITableViewScrollPosition.Top, true); 

这将滚动到细胞由indexPath给出。在这种情况下,您可以选择在屏幕的.Top上显示该选项。

如果没有indexPath,你可以使用:

tableView.ScrollRectToVisible(new RectangleF(0, Ydisplacement, tableView.Width, tableView.Height), true); 
+0

对不起,如果问题不明确。当然,手动滚动表格并不重要。我们想要在这里做的是UITableView的子类,所以当视图调整大小时,表视图自己移动表格,以便“底点”在任何时候都完全匹配,即使在动画期间也是如此。 – Fattie

+0

请注意,它在问题中提到:“自然地,您所做的只是在键盘出现后滚动表格,例如,以特别方式进行操作时没有问题。”注意FTR,你不能仅仅使用索引路径来做到这一点,你需要确切的像素位置。但这与这个问题无关,欢呼声 – Fattie

+0

哦,你是对的,我误解了你的问题。你有没有尝试玩autoLayout?我想你将不得不在程序中以键盘的形式添加一个约束到你的tableView。 – pesch