Swift: ширина ячейки табличного представления и положение - PullRequest
0 голосов
/ 31 октября 2018

Я создаю чат

Я хочу, чтобы позиция 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 голосов
/ 31 октября 2018

Пожалуйста, рассмотрите возможность использования Anchor для MyChatCellLeft и MyChatCellRight и привязывайте каждый пример:

cell.messageLabel = "Мое сообщение"

cell.floatPosition = true // true left / false right

Я должен отметить, что я не проверял это. но вы можете попробовать это и взять это как образец для того, что вы делаете .. вам также нужно добавить некоторую логику того, кто есть кто ... пример 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)
    }
}
}
0 голосов
/ 31 октября 2018
  • Рассмотрим ячейку как целую строку и используйте подпредставление для обновления кадров.
  • Обновление фреймов по методу будет отображать ячейку для строки по пути индекса
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...