分配代理以检测滚动后,TableView单元格重叠
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分配代理以检测滚动后,TableView单元格重叠相关的知识,希望对你有一定的参考价值。
这是聊天的表格视图。 我想添加一个按钮,当表视图没有滚动到底部时出现。 该按钮应作为按下时滚动到表格视图底部的快捷方式。 在viewDidLoad中,我创建了一个渐变图层(UIView),阴影图层(UIView)和一个UIButton。
- (void)viewDidLoad {
[super viewDidLoad];
//Create a gradient UIView
//Assuming color, size & other appearance properties are set here...
[self.view addSubview:gradientLayer];
//Create a button shadow UIView
//Assuming color, size & other appearance properties are set here...
[self.view addSubview:goToBtmShadow];
//Create a button that scrolls to bottom of table view
//Assuming color, size & other appearance properties are set here...
[self.view addSubview:goToBtm];
[self showGoToBtm:NO]; //Button is hidden by default
// ↓ TAKE NOTE OF THIS LINE
self.tableView.delegate = self; // <-- THIS LINE
// ↑ THIS LINE
}
在scrollViewDidScroll中,我已将其设置为检查表视图是否滚动到底部以确定是否应显示该按钮。
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
BOOL isScrolledToBottom = self.tableView.contentOffset.y >= (self.tableView.contentSize.height - self.tableView.bounds.size.height - 0.1);
if (isScrolledToBottom) {
[self showGoToBtm:NO];
} else {
[self showGoToBtm:YES];
}
}
创建showGoToBtm函数是为了在编码时使生活更轻松。
- (void) showGoToBtm:(BOOL)show {
if (show == true) {
gradientLayer.hidden = NO;
goToBtmShadow.hidden = NO;
goToBtm.hidden = NO;
goToBtm.enabled = YES;
} else {
gradientLayer.hidden = YES;
goToBtmShadow.hidden = YES;
goToBtm.hidden = YES;
goToBtm.enabled = NO;
}
}
如果没有将self.tableView.delegate = self;
添加到viewDidLod中,则无论如何都不会出现该按钮。
但是当它最终添加时,按钮的行为与预期的一样,但表视图开始以奇怪的方式表现。单元格没有以正确的行高显示,并且内容彼此重叠。
Screenshot before delegate is added Screenshot after delegate is added
你确定这个按钮有问题吗?如果您只是删除scrollViewDidScroll
问题仍然存在?
无论如何,你可能遇到的问题是,如果委托是null
,你的表视图使用的默认值可能是在故事板中设置的,旨在自动调整大小。
请尝试将估计的行高代表方法添加到某些值,如100
。并添加行高度委托方法并将其设置为automatic
。或者在视图加载时直接在表视图上设置这2。
以上是关于分配代理以检测滚动后,TableView单元格重叠的主要内容,如果未能解决你的问题,请参考以下文章
UISearchController 的搜索栏与第一个 tableview 单元格重叠
如何根据条件为单元格正确分配样式,而不会在快速滚动后出现奇怪的样式行为?