Я не использовал LGButton, но смотрю на https://github.com/loregr/LGButton/blob/develop/LGButton/Classes/LGButton.swift,, предполагая, что это код, который вы используете, после установки градиента вы не можете его изменить. Поэтому, когда ваши ячейки используются повторно, даже если вы пытаетесь сбросить цвета градиента в вашей функции style
, код LGButton не учитывает изменение.
В приведенной выше ссылке в строке 398 (на момент написания этой статьи) первая строка функции setupGradientBackground
проверяет, равна ли переменная gradient
нулю, если это так, она устанавливает gradient
, что означает, что она не будет изменить позже при обновлении начального и конечного цветов градиента. Я думаю, что это недостаток в LGButton - когда вы меняете значение начального или конечного цветов, он должен пересчитать градиент.
Мне кажется, вы можете установить градиент на ноль, чтобы вызвать пересчет. Возможно, вам нужно установить все значения на ноль, чтобы градиент не сбрасывался до того, как вы закончили установку всех своих значений.
В приведенном ниже фрагменте я также переименую параметр ячейки в button
, чтобы его вызов не вводил в заблуждение - похоже, что вы передаете ячейку, а не кнопку.
func style(button:LGButton, index: Int) {
button.gradientStartColor = nil
button.gradientEndColor = nil
button.gradient?.removeFromSuperLayer()
button.gradient = nil
button.gradientStartColor = UIColor(hexString: colors[index % colors.count][0])
button.gradientEndColor = UIColor(hexString: colors[index % colors.count][1])
button.shadowColor = UIColor(hexString: colors[index % colors.count][0])
button.shadowRadius = 8
button.shadowOpacity = 0.8
}