只是没有得到正确的搜索词,但我的问题是如何实现这个tableview功能,我可以滚动到顶部,但只有在进一步滚动到顶部时,第一行顶部会出现一行。
WhatsApp用于显示“存档聊天”的类似功能,此处滚动到您的聊天列表,进一步滚动显示存档聊天。
我正在使用swift 2.3
谢谢
答案 0 :(得分:1)
也许有点晚了,但是在这里,您有一个变通方法(objective-c)来复制whatsapp归档的聊天滚动进一步的功能:
我使用两个布尔值来确定表视图是否位于顶部,以及是否可以看到已存档的聊天行。
var a = {
"id": "ABCD",
"description": "some info",
"parents": [], //no parents
"children": []
};
var b = {
"id": "EFG",
"description": "more info",
"parents": [],
"children": []
};
var c = {
"id": "LMNOP",
"description": "something",
"parents": [],
"children": []
};
var d = {
"id": "XYZ",
"description": "something",
"parents": [],
"children": [] //no child nodes
};
a.children.push(b);
b.parents.push(a);
//and so on.
var network = [a,b,c,d];
然后使用这些布尔来使用滚动视图委托,插入或删除用于显示存档聊天单元的部分。
@property (assign, nonatomic) BOOL isArchivedChatsRowVisible;
@property (assign, nonatomic) BOOL isScrollAtTop;
我希望它会有用
答案 1 :(得分:0)
@cmacera 答案的 Swift 5 版本。我已选择使用 tableHeaderView
来实现相同的结果。
向他们致敬,一个很好的简单解决方案。现在在 Swift 中。
状态变量:
var isArchivedChatsRowVisible: Bool = false
var isScrollAtTop: Bool = true
滚动视图委托方法。
override func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
if scrollView.contentOffset.y > 0 {
isScrollAtTop = false
}
}
override func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
isScrollAtTop = scrollView.contentOffset.y > 0 ? false : true
}
override func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView.contentOffset.y > 0, isArchivedChatsRowVisible {
isScrollAtTop = false
isArchivedChatsRowVisible = false
tableView.beginUpdates()
tableView.tableHeaderView = nil
tableView.endUpdates()
}
if isScrollAtTop, scrollView.contentOffset.y < 0, !isArchivedChatsRowVisible {
isArchivedChatsRowVisible = true
tableView.beginUpdates()
tableView.tableHeaderView = archivedChatHeaderView
tableView.endUpdates()
}
}
答案 2 :(得分:-1)
您可以实现UIScrollview的委托方法scrollViewDidScroll
。如果您将tableview的委托设置为self
,或者您已实施或确认UITableViewDelegate
,那么您将自动符合UIScrollViewDelegate
protocall,因为UITableViewDelegate
实施了UIScrollViewDelegate
。
在scrollViewDidScroll
,
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
UITableView *tab = (UITableView *)scrollView;
if (self.yourTableView == tab) {
// Detect Scroll position and add button or do whatever you want
}
}