Это табличный вид для чата.
Я хочу добавить кнопку, которая появляется, когда представление таблицы не прокручивается вниз.
Кнопка должна служить ярлыком для прокрутки вниз таблицы при нажатии.
В 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 кнопка не появится ни на что.
Но когда он, наконец, добавлен, кнопка ведет себя так, как ожидалось, но вместо этого табличное представление начинает вести себя странным образом. Ячейки не отображаются с правильной высотой строки, и содержимое перекрывает друг друга.

Снимок экрана перед добавлением делегата
Снимок экрана после добавления делегата

0
GlyphCat 1 Мар 2018 в 12:47

1 ответ

Лучший ответ

Вы уверены, что проблема в этой кнопке? Если вы просто удалите scrollViewDidScroll, проблема не исчезнет?

В любом случае, у вас, вероятно, проблема с тем, что если делегат null, ваше табличное представление использует значения по умолчанию, которые, вероятно, установлены в раскадровке и предназначены для автоматического изменения размера.

Попробуйте добавить метод делегата предполагаемой высоты строки к некоторому значению, например 100. И добавьте метод делегата высоты строки и установите его на automatic. В качестве альтернативы установите эти 2 в табличном представлении непосредственно при загрузке представления.

0
Matic Oblak 1 Мар 2018 в 13:26