Правильный способ стилизации ячейки внутри TableView без задержек, проблем с прокруткой и проблем с динамической c высотой - PullRequest
0 голосов
/ 09 марта 2020

У меня есть TableView и ячейка. Содержимое ячейки находится в UIView. Я хочу применить эту функцию:

extension UIView {
public func addSoftUIEffectForView(cornerRadius: CGFloat = 15.0, themeColor: UIColor = UIColor(red:0.10, green:0.11, blue:0.12, alpha:1.0)) {
    self.layer.cornerRadius = cornerRadius
    self.layer.masksToBounds = false
    self.layer.shadowRadius = 2
    self.layer.shadowOpacity = 1
    self.layer.shadowOffset = CGSize( width: 2, height: 2)
    self.layer.shadowColor = UIColor(red:0.08, green:0.08, blue:0.09, alpha:1.0).cgColor

    let shadowLayer = CAShapeLayer()
    shadowLayer.frame = bounds
    shadowLayer.backgroundColor = themeColor.cgColor
    shadowLayer.shadowColor = UIColor(red:0.14, green:0.15, blue:0.16, alpha:1.0).cgColor
    shadowLayer.cornerRadius = cornerRadius
    shadowLayer.shadowOffset = CGSize(width: -2.0, height: -2.0)
    shadowLayer.shadowOpacity = 1
    shadowLayer.shadowRadius = 2
    self.layer.insertSublayer(shadowLayer, at: 0)
    }
}

к этому UIView.

Я испробовал следующие подходы:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableViewPostComments.dequeueReusableCell(withIdentifier: "cellComment", for: indexPath) as! PostCommentsTableViewCell

    cell.viewTableViewContainer.addSoftUIEffectForView()

    return cell
}

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

Применение функции в моем пользовательском TableViewCell:

@IBOutlet weak var viewTableViewContainer: UIView! {
    didSet {
        viewTableViewContainer.addSoftUIEffectForView()
    }
}

Результат: прокрутка табличного представления запаздывает, стиль неправильный применяется, потому что у меня есть динамо c высота клетки. Стилизуется только начальная высота ячейки.

Как правильно стилизовать мой UIView внутри моей ячейки TableView, без задержки, с правильной высотой, без проблем с прокруткой?

Ответы [ 2 ]

0 голосов
/ 09 марта 2020

Я предлагаю вам использовать пользовательский класс для UIView() вместо использования расширенного function()

  • например,
class RoundAlphaView: UIView {

    override func layoutSubviews() {
        super.layoutSubviews()

        self.layer.cornerRadius = 15
        self.layer.masksToBounds = false
        self.layer.shadowRadius = 2
        self.layer.shadowOpacity = 1
        self.layer.shadowOffset = CGSize( width: 2, height: 2)
        self.layer.shadowColor = UIColor(red:0.08, green:0.08, blue:0.09, alpha:1.0).cgColor
        let shadowLayer = CAShapeLayer()
        shadowLayer.frame = bounds
        shadowLayer.backgroundColor = yourColor.cgColor
        shadowLayer.shadowColor = UIColor(red:0.14, green:0.15, blue:0.16, alpha:1.0).cgColor
        shadowLayer.cornerRadius = cornerRadius
        shadowLayer.shadowOffset = CGSize(width: -2.0, height: -2.0)
        shadowLayer.shadowOpacity = 1
        shadowLayer.shadowRadius = 2
        self.layer.insertSublayer(shadowLayer, at: 0)
    }
}
  • И использовать как Custom Class

enter image description here

0 голосов
/ 09 марта 2020

Внутри cellForRowAt добавит его несколько раз, в то время как прокрутка в дополнение к границам представления неверна. Сделайте это внутри пользовательского класса ячейки

var once = true

override func layoutSubviews() {
  super.layoutSubviews()
  if once {
     // add here
     once = false
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...