>

앱에서 자동 레이아웃을 사용하여 동적 높이 셀을 사용하고 있습니다. 따라서 cardview 효과를 만들기 위해 tableview willdisplaycell 메소드를 사용했습니다. 셀에 그림자를 한 번만 추가합니다. 그러나 스크롤하는 동안 그림자가 왜 커지는 지 모르겠습니다.

내 코드는

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        //setup card view style on cell
        if !cellArray.contains(indexPath.row) {
            cell.contentView.backgroundColor = UIColor.clear
            let whiteRoundedView : UIView = UIView(frame: CGRect(x: 5.0, y: 5.0, width: cell.contentView.frame.size.width-10, height: cell.contentView.frame.size.height-10))
            whiteRoundedView.layer.backgroundColor = UIColor.white.cgColor
            whiteRoundedView.layer.masksToBounds = false
            whiteRoundedView.layer.cornerRadius = 5.0
            whiteRoundedView.layer.shadowOffset = CGSize(width: -1, height: 1)
            whiteRoundedView.layer.shadowOpacity = 0.5
            cell.contentView.addSubview(whiteRoundedView)
            cell.contentView.sendSubview(toBack: whiteRoundedView)
            cellArray.add(indexPath.row)
        }
    }


  • 답변 # 1

    이 라인이 문제의 원인입니다.

    와이즈 비즈

    willDisplayCell이 호출 될 때마다 매번보기가 추가됩니다. 이것이 스크롤하는 동안 그림자가 증가하는 이유입니다. 해결책은

    cell.contentView.addSubview(whiteRoundedView)

    하지만 개인적으로는 뷰 렌더 로직을 뷰 컨트롤러 또는 셀과 분리하는 옵션 2를 선호합니다.

    아래 코드를 사용자 정의 셀 클래스에 추가하십시오. 이 경우, 15- 15-15-15와 같은 선행 평가-상단-하단 제약 조건을 부여했습니다. 원하는 경우 0으로 설정할 수 있지만 배경 제약 조건과 동기화되어야합니다.

    1. check the cell content view if the view is already added or not. If not, then add the view. use view tag to do it.
    2. otherwise, create a shadow view and initialize the specific things in the -(void)awakeFromNib, which will get called only once.
    
    

    참조 스크린 샷 :

  • 답변 # 2

    여기에 코드를 추가 할 수 있습니다

    override func awakeFromNib() {
        super.awakeFromNib()
        contentView.backgroundColor = UIColor.clear
        let whiteRoundedView : UIView = UIView(frame: CGRect(x: 5.0, y: 5.0, width: contentView.frame.size.width-10, height: contentView.frame.size.height-10))
        whiteRoundedView.layer.backgroundColor = UIColor.white.cgColor
        whiteRoundedView.layer.masksToBounds = false
        whiteRoundedView.layer.cornerRadius = 5.0
        whiteRoundedView.layer.shadowOffset = CGSize(width: -1, height: 1)
        whiteRoundedView.layer.shadowOpacity = 0.5
        whiteRoundedView.tag = shadowTag
        whiteRoundedView.translatesAutoresizingMaskIntoConstraints=false
        contentView.addSubview(whiteRoundedView)
        contentView.sendSubview(toBack: whiteRoundedView)
        let leading = NSLayoutConstraint(item: whiteRoundedView,
                                         attribute: .leading,
                                         relatedBy: .equal,
                                         toItem: contentView,
                                         attribute: .leading,
                                         multiplier: 1.0,
                                         constant: 15.0)
        let trailing = NSLayoutConstraint(item: whiteRoundedView,
                                          attribute: .trailing,
                                          relatedBy: .equal,
                                          toItem: contentView,
                                          attribute: .trailing,
                                          multiplier: 1.0,
                                          constant: -15.0)
        let top = NSLayoutConstraint(item: whiteRoundedView,
                                     attribute: .top,
                                     relatedBy: .equal,
                                     toItem: contentView,
                                     attribute: .top,
                                     multiplier: 1.0,
                                     constant: 15.0)
        let bottom = NSLayoutConstraint(item: whiteRoundedView,
                                        attribute: .bottom,
                                        relatedBy: .equal,
                                        toItem: contentView,
                                        attribute: .bottom,
                                        multiplier: 1.0,
                                        constant: -15.0)
        contentView.addConstraint(leading)
        contentView.addConstraint(trailing)
        contentView.addConstraint(top)
        contentView.addConstraint(bottom)
    }
    
    

    이것이 도움이되기를 바랍니다

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { var cell = tableView.dequeueReusableCell(withIdentifier: <idenitfier>, for: indexPath) as? JobListTableViewCell if cell == nil { //Initialization and setting of shadow } return cell }

  • 이전 codeigniter - 데이터베이스에 삽입 할 수 없습니다 - php
  • 다음 여러 옵션 스칼라에서 효과적인 패턴 매칭 방법