TableViewCell границы и тени при прокрутке вниз (или при переходе с ipad на iphone) - PullRequest
0 голосов
/ 26 июня 2018

Во-первых, я прошу прощения за название, но я не уверен, что вызывает мою проблему!

Я настроил свои TableViewCells на iPad (ios 9), пока границы и тени не были такими, как я хотел ... но когда я запустил приложение на iPhone 6 (iOS 11.3), появились некоторые странные изменения.

enter image description here

Вот так начинается экран, и вы можете видеть неравномерность тени во второй ячейке и квадратный фон из третьей ячейки

enter image description here

Это прокрутка вниз, у всех клеток есть проблема с тенью и границей.

Я использовал UIView внутри ячейки, чтобы добавить интервал и стиль, чтобы у представления были тени и радиус угла, а cell.backgroundColor = UIColor.clear.

Похоже, что фон ячеек снова стал белым для ячеек, которые полностью или частично вышли из экрана ...

Есть идеи? Спасибо!


EDIT:

Спасибо за комментарии! Я делюсь частями кода ниже:

        cell.backView.layer.borderWidth = 5
        cell.backView.layer.borderColor = UIColor.clear.cgColor
        cell.backView.layer.cornerRadius = 10
        let shadowPath2 = UIBezierPath(rect: cell.backView.bounds)
        cell.backView.layer.masksToBounds = false
        cell.backView.layer.shadowColor = UIColor.black.cgColor
        cell.backView.layer.shadowOffset = CGSize(width: CGFloat(1.0), height: CGFloat(3.0))
        cell.backView.layer.shadowOpacity = 0.5
        cell.backView.layer.shadowPath = shadowPath2.cgPath
        cell.backgroundColor = UIColor.clear

Итак, backView - это View со всем содержимым ячейки. Есть пара вещей, которые не нужны, так как я пробовал что-то, но, насколько я знаю, причиной должна быть не ...

Кстати, когда я запускал код сегодня, он выглядел так, как должен, но я ничего не сделал с tableView, я полностью работал над другим вопросом, поэтому проблема официально не решена ...

Кроме того, я заметил, что после возвращения из череды тени иногда покрывали только нижнюю половину ячейки ... Может ли это быть той же проблемой, возможно?

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Я думаю, вы делаете больше, чем нужно ...

Предполагая, что вы добавили backView к прототипу своей ячейки в IB, а все остальное содержимое содержится в этом представлении (метки, диаграмма и т. Д.), Вы можете добавить его в свой класс ячейки:

override func awakeFromNib() {

    backView.layer.cornerRadius = 10.0
    backView.layer.masksToBounds = false
    backView.layer.shadowColor = UIColor.black.cgColor
    backView.layer.shadowOffset = CGSize(width: 1.0, height: 3.0);
    backView.layer.shadowOpacity = 0.5

}

, который дает этот результат:

enter image description here

Никакой другой код не нужен ... тени будут сохранять свой внешний вид при прокрутке / вращении устройства / и т. Д.

0 голосов
/ 26 июня 2018

Диагноз проблемы:

Проблема заключается в том, что каждая ячейка обрабатывается как отдельное представление без перекрытия между каждым представлением. Поскольку перекрытия нет, содержимое теневых видов обрезается до границ. Это делает явное несоответствие backgroundColor (без перекрытия = прозрачность не имеет значения).

Решение:

Чтобы расширить тень для каждой ячейки за пределами границ ячейки (фактически игнорируя размер представления), установите cell.clipsToBounds = false Это сделает тень за пределами ячейки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...