Swift:TableView单元格更改宽度和位置

时间:2018-10-31 07:29:53

标签: swift uitableview tableview

我创建聊天室

我希望用户1在右侧聊天,而用户2在左侧聊天,如图所示

enter image description here

我的代码:

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

        var frame = cell.frame
        let newWidth = frame.width * 0.50
        let space = (frame.width - newWidth) / 2
        frame.size.width = newWidth
        frame.origin.x += space

        cell.frame = frame

        return cell
}

但是我的代码不起作用

2 个答案:

答案 0 :(得分:1)

请考虑将Anchor用于MyChatCellLeft和MyChatCellRight并锚定每个示例:

cell.messageLabel =“我的消息”

cell.floatPosition = true //左为真/右为假

我必须提到我还没有测试过。但是您可以尝试一下,并将其作为您正在做的事情的蓝图。.您还需要添加某种逻辑,确定谁是谁...例如user1离开了user2离开了。这取决于您的逻辑...

class ChatBubbleCell: UITableViewCell{

var position: Bool = false

let messageLabel: UILabel = {
    let label = UILabel()
    label.numberOfLines = 0
    label.translatesAutoresizingMaskIntoConstraints = false
    return label
}()

var floatPosition = Bool() {
    didSet {
        if(floatPosition == true){
            position = true
        } else {
            position = false
        }
    }
}

override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
    super.init(style: style, reuseIdentifier: reuseIdentifier)
    setupViews()
}

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

func setupViews(){
    addSubview(messageLabel)
    // lef position
    if position == true {
        let constrains = [messageLabel.topAnchor.constraint(equalTo: topAnchor, constant: 15),
                          messageLabel.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -15),
                          messageLabel.leftAnchor.constraint(equalTo: leftAnchor, constant: 20)
        ]
        NSLayoutConstraint.activate(constrains)
    } else {
        let constrains = [messageLabel.topAnchor.constraint(equalTo: topAnchor, constant: 15),
                          messageLabel.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -15),
                          messageLabel.rightAnchor.constraint(equalTo: rightAnchor, constant: -30)
        ]
        NSLayoutConstraint.activate(constrains)
    }
}
}

答案 1 :(得分:0)

  • 将单元格视为整行,并使用子视图更新框架。
  • 使用方法更新框架,将在索引路径处显示行单元格