IOS Swift изменить левый правый отступ TableviewCell - PullRequest
0 голосов
/ 02 ноября 2018

Привет, я пытаюсь сделать пузырь UITableviewCell. ячейка имеет UILabel со всеми edges контактами по краям ячейки ContentView, а UITableView использует AutomaticHeight (основано на Label.text). Я установил изображение CellBackgroundView в качестве функции ниже

func changeImage(_ name: String) -> UIImage? {
        guard let image = UIImage(named: name) else { return nil }
        return image.resizableImage(withCapInsets: UIEdgeInsets(top: 17, left: 30, bottom: 17, right: 30), resizingMode: .stretch).withRenderingMode(.alwaysTemplate)
    } 

выше функция вызывается в cellforRowAtIndexPath

cell.backgroundView = UIImageView(image: changeImage("right_bubble"))

У меня фоновое изображение выглядит как пузыри

enter image description here

Проблема в том, что я не могу изменить левый или правый padding из Cell. Есть ли способ изменить отступ (может быть левым или правым) (чтобы различать отправителя и получателя) или нужно изменить с UITableView на UICollectionView?

Редактировать: Я предложил решение динамически изменять ограничение в подклассе Custom Cell. Ниже приведена реализация подкласса

import UIKit

enum Direction {
    case left
    case right
}

class MessageCell: UITableViewCell {

    @IBOutlet weak var backgroundImageView: UIImageView!

    @IBOutlet weak var messageText: UILabel!
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func prepareForReuse() {
        self.layoutIfNeeded()
    }

    func configureCell(with message: Message, direction: Direction ) {
        self.messageText?.text = message.text

        switch direction {
        case .left:
            backgroundImageView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 10).isActive = true
            contentView.trailingAnchor.constraint(greaterThanOrEqualTo: backgroundImageView.trailingAnchor, constant: 50).isActive = true
            self.backgroundImageView.image = UIImage.changeImage("left_bubble")
            self.backgroundImageView.tintColor = .lightGray
        case .right:
            backgroundImageView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -10).isActive = true
            backgroundImageView.leadingAnchor.constraint(greaterThanOrEqualTo: contentView.leadingAnchor, constant: 50).isActive = true
            self.backgroundImageView.image = UIImage.changeImage("right_bubble")
            self.backgroundImageView.tintColor = .blue
        }
        self.layoutIfNeeded()
    }

}

, но возникает проблема с Autolayout, когда число строк превышает высоту экрана и требует прокрутки. Сильфон это ошибка

2018-11-03 19:53:36.478275+0800 VicGithubDM[2352:34611] [LayoutConstraints] Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. 
    Try this: 
        (1) look at each constraint and try to figure out which you don't expect; 
        (2) find the code that added the unwanted constraint or constraints and fix it. 
(
    "<NSLayoutConstraint:0x6000006e9090 V:|-(10)-[UILabel:0x7fe37dd3bb70'still have some bugs stil...']   (active, names: '|':UITableViewCellContentView:0x7fe37dd3b750 )>",
    "<NSLayoutConstraint:0x6000006ea620 V:[UILabel:0x7fe37dd3bb70'still have some bugs stil...']-(10)-|   (active, names: '|':UITableViewCellContentView:0x7fe37dd3b750 )>",
    "<NSLayoutConstraint:0x6000006e1d10 'UIView-Encapsulated-Layout-Height' UITableViewCellContentView:0x7fe37dd3b750.height == 1.19209e-07   (active)>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x6000006ea620 V:[UILabel:0x7fe37dd3bb70'still have some bugs stil...']-(10)-|   (active, names: '|':UITableViewCellContentView:0x7fe37dd3b750 )>  

1 Ответ

0 голосов
/ 02 ноября 2018

Я рекомендую создать пользовательскую ячейку и изменить значения ограничений в зависимости от типа.

...