안녕하세요 저는 채팅보기를 구현하려고합니다.UITableViewCell의 높이가 작동하지 않습니다.
내 문제는 ... 업데이트
작동하지 않습니다 스택보기의 자동 레이아웃입니다 :
내가 해결 .. 여기
// 내있는 UITableViewCell입니다. 여기
그리고
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을 설정
스택보기이 간단한 상황에서 아마 잔인한 테이블 셀의 높이를 관리합니다. – matt
조언 해 주셔서 감사합니다 –