2017-02-26 3 views
0

안녕하세요 저는 채팅보기를 구현하려고합니다.UITableViewCell의 높이가 작동하지 않습니다.

내 문제는 ... 업데이트

작동하지 않습니다 스택보기의 자동 레이아웃입니다 :

내가 해결 .. 여기

// 내있는 UITableViewCell입니다. 여기

enter image description here

그리고

enum ChatType: Int { 
    case Message 
    case Photo 
} 

class BubbleCell: UITableViewCell { 

    //Message Bubble 
    var bubbleLbl = UILabel() 
    var eventLbl = UILabel() 

    //Photo Bubble 
    var paymentView = UIStackView() 
    var itemImg = UIImageView() 

    //Photo Bubble 
    var stackView = UIStackView() 

    //settings 
    var owner = Bool() 
    var type = String() 
    var event = Bool() 

    //stackMargin 
    var topInset: CGFloat = 5.0 
    var bottomInset: CGFloat = 5.0 
    var leftInset: CGFloat = 0.0 
    var rightInset: CGFloat = 0.0 

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) { 

     super.init(style: style, reuseIdentifier: reuseIdentifier) 


    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

    func configureCell(owner:Bool, type:ChatType, isLast:Bool) { 

     self.owner = owner 

     //set Autolayout 
//  contentView.translatesAutoresizingMaskIntoConstraints = false 
     stackView.translatesAutoresizingMaskIntoConstraints = false 
     bubbleLbl.translatesAutoresizingMaskIntoConstraints = false 
     eventLbl.translatesAutoresizingMaskIntoConstraints = false 
     paymentView.translatesAutoresizingMaskIntoConstraints = false 
     itemImg.translatesAutoresizingMaskIntoConstraints = false 

     //set stackView 
     stackView.axis = .vertical 
     stackView.spacing = 4 
     stackView.distribution = .fill 


     bubbleLbl.backgroundColor = .red 



     addSubview(stackView) 

     if owner == true { 

      leftInset = 90.0 
      rightInset = 16.0 
      stackView.alignment = .trailing 

     }else { 

      leftInset = 16.0 
      rightInset = 90.0 
      stackView.alignment = .leading 

     } 



     stackView.leftAnchor.constraint(equalTo: self.leftAnchor, constant: 20.0).isActive = true 
     stackView.rightAnchor.constraint(equalTo: self.rightAnchor, constant: -20.0).isActive = true 
     stackView.topAnchor.constraint(equalTo: self.topAnchor, constant: 5.0).isActive = true 
     stackView.bottomAnchor.constraint(equalTo: self.bottomAnchor, constant: -5.0).isActive = true 


     switch type { 
      case .Message : 

       print("Message") 
       stackView.addSubview(bubbleLbl) 

      case .Photo: 

       print("Hellow") 


     } 


     // add updated time to lastCell 
     if isLast { 

      eventLbl.translatesAutoresizingMaskIntoConstraints = false 
      stackView.addSubview(eventLbl) 
     } 

     stackView.layoutSubviews() 
     stackView.layoutIfNeeded() 

     layoutIfNeeded() 
     layoutSubviews() 



    } 

    override func awakeFromNib() { 
     super.awakeFromNib() 
     // Initialization code 



    } 


} 

내 TableVieController

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 


     //define cell 
     let bubble = tableView.dequeueReusableCell(withIdentifier: "BubbleCell", for: indexPath) as! BubbleCell 

     let object = results[indexPath.row] 

     var checkLastCell = false 

     if indexPath.row == (results.count - 1) { 

      checkLastCell = true 


     } 

     bubble.configureCell(owner: object.isMyBubble!, type: .Message, isLast: checkLastCell) 


     bubble.bubbleLbl.text = object.messageTxt 
     bubble.eventLbl.text = object.msgDate 


     bubble.sizeToFit() 

     return bubble 

    } 

당신은 빨간색 볼 수 있듯이 UILable이다 나는 셀 내부에 앵커를 설정했지만 그것은 작동하지 않습니다.

도와 주시겠습니까?

감사합니다 그냥 0으로 셀의 UILabel의의 numberOfLines을 설정

+0

스택보기이 간단한 상황에서 아마 잔인한 테이블 셀의 높이를 관리합니다. – matt

+0

조언 해 주셔서 감사합니다 –

답변

1

후는 것이다 라벨 자동으로 높이를 반환하고이

+0

고마워요. 제게 많은 도움이됩니다 ...하지만 성능에 영향을주지 않습니까? 스크롤하는 동안 스크롤 성능에 영향을 미칠 것입니다 때 uilabel 계산할 때 생각합니다. 당신은 그것에 대해 어떻게 생각하세요? –

관련 문제