分配代理以检测滚动后,TableView单元格重叠

时间:2018-03-01 09:47:58

标签: ios objective-c scroll tableview overlap

这是聊天的表格视图。
我想添加一个按钮,当表视图没有滚动到底部时出现。
该按钮应作为按下时滚动到表格视图底部的快捷方式。
在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

1 个答案:

答案 0 :(得分:0)

你确定问题出在这个按钮上吗?如果您只是删除scrollViewDidScroll,问题是否仍然存在?

无论如何,你可能遇到的问题是,如果委托是null,你的表视图使用的默认值可能是在故事板中设置的,并且是为自动调整大小而设计的。

请尝试将估计的行高代表方法添加到某些值,例如100。并添加行高度委托方法并将其设置为automatic。或者在视图加载时直接在表视图上设置这两个。