Ограничить привязку к нижней привязке необязательного просмотра текста - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть ярлык, commentLabel и textview, statsLabel.Они являются частью ячейки, которая содержит еще пару ярлыков (usernameLabel, checkinName, ...).

То, чего я хочу добиться, - это statsLabel (в котором отображается количество лайков и комментариев)отображается под комментарием.Однако, если commentLabel пусто, я удаляю его из своего подпредставления (потому что в противном случае метка по-прежнему занимает 1 строку без текста, что беспокоит меня из-за различных проблем с автоматическим размещением).

Что я делаю в своей ячейке (UICollectionViewCell)) class:

contentView.addSubview(commentTextview)
contentView.addSubview(statsLabel)

В моем методе cellForItemAt я устанавливаю текст обоих элементов на основе строки в массиве, например так:

if let comment = feed[indexPath.item].commentText {

    cell.commentTextview.text = comment
    if(comment.isEmpty) {

        cell.commentTextview.removeFromSuperview()

    }

}

Это работает как шарм.Текстовое представление удаляется при необходимости и остается видимым при наличии текста.Он работает, когда есть текст, но когда он пустой (и, следовательно, удален), statsLabel не знает, где ограничить, так как я установил следующее ограничение в своем классе ячеек (переопределить init):

statsLabel.topAnchor.constraint(equalTo: commentTextview.bottomAnchor, constant: 2).isActive = true

Любая идея, как я могу убедиться, что ограничение связано с commentTextview при необходимости, но с usernameLabel, когда оно пустое?

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Я предлагаю использовать представление стека, потому что вам было бы легче управлять этим типом поведения, но в любом случае вы можете установить свое ограничение как переменную:

private lazy var topToCommentConstraint: NSLayoutConstraint = {
    let top = statsLabel.topAnchor.constraint(equalTo: commentTextview.bottomAnchor, constant: 2)
    top.isActive = true
    return top
}()

private lazy var topToUsernameConstraint: NSLayoutConstraint = {
    let top = statsLabel.topAnchor.constraint(equalTo: usernameLabel.bottomAnchor, constant: 2)
    top.isActive = false
    return top
}()

if(comment.isEmpty) {

    cell.commentTextview.removeFromSuperview()
    topToCommentConstraint.isActive = false
    topToUsernameConstraint.isActive = true
}
0 голосов
/ 27 сентября 2018

Вы можете создать оба ограничения, а затем активировать / деактивировать по мере необходимости.

...