2016-09-01 4 views
2

Я пытаюсь установить прозрачный градиентный цвет в моей таблице. Все работает отлично при первой загрузке, но с каждым прокруткой цвет снова загружается, и градиент кажется темнее и темнее с каждым прокруткой, и при каждом прокрутке табличное представление кажется более медлительным. Вот мой код для реализации градиента цвета: -Градиент с альфой в tableviewcell становится темнее с каждым прокруткой

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) { 
    cell.contentView.layer.insertSublayer(gradient(cell.bounds), atIndex: 1) 
} 

func gradient(frame:CGRect) -> CAGradientLayer { 
    let layer = CAGradientLayer() 
    layer.frame = frame 
    layer.startPoint = CGPointMake(0,0.68) 
    layer.endPoint = CGPointMake(0,0.75) 
    layer.colors = [UIColor.clearColor().CGColor,UIColor.blackColor().colorWithAlphaComponent(0.2).CGColor] 
    return layer 
} 
+0

cell многоразовый не работает ... думаю. Снова и снова он выделяется, при прокрутке изображения становится темнее. –

+0

Ячейки являются многократно используемыми объектами, что означает, что вам нужно вставлять слой только один раз при инициализации их * ('tableView: cellForRowAtIndexPath:' может быть хорошим местом для добавления этого слоя, если вы не хотите создавать собственный класс ячеек) *. Затем вы можете обновить фрейм слоя в методе 'willDisplayCell' или' layoutSubviews' соответствующей ячейки. – ozgur

+0

Это определенно проблема с повторным использованием ячеек. Имейте в виду, что если вы повторно используете ячейки (вы должны), и при каждом прокрутке вы устанавливаете прозрачность ячейки = cell.trasparency + 0.1 (псевдо-код, чтобы показывать приращение), прозрачность будет увеличиваться – BlackM

ответ

1

1) Добавить подвид на мобильный, как и подключить его к View Controller:

enter image description here

class MyCell : UITableViewCell {  
    @IBOutlet weak var bgView: UIView!   
} 

2) Удалить свою линию от willDisplayCell метод переместить его на ваш cellForRowAt() метод, обновленный следующим образом:

override func tableView(tableView: UITableView, cellForRowAtIndexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "MyCell", for: indexPath) as! MyCell 

    if(cell.bgView.layer.sublayers == nil) { 
     cell.bgView.layer.insertSublayer(gradient(frame: cell.bounds), at: 1) 
    } 
    return cell 
} 
+0

Извините, когда проблемы с мягкой быстрой несовместимостью, я развернулся на Swift 3.0. – pedrouan

+1

Спасибо, человек действительно решил проблему! – Parion