简体   繁体   中英

How to wrap long text correctly?

In my application users can post comments on posts. Everything works fine however the lines do not wrap when creating a long text thus I get this

在此处输入图像描述

numberOfLines is set to = 0

Here is the code in the commentCell setting the constraints


   let commentLabel: ActiveLabel = {
            let label = ActiveLabel()
            label.font = UIFont.systemFont(ofSize: 13)
            label.numberOfLines = 0

            return label
            }()

  override init(frame: CGRect) {
            super.init(frame: frame)



            addSubview(profileImageView)
            profileImageView.anchor(top: topAnchor, left: leftAnchor, bottom: nil, right: nil, paddingTop: 8, paddingLeft: 8, paddingBottom: 0, paddingRight: 0, width: 40, height: 40)
            profileImageView.layer.cornerRadius = 40 / 2


            addSubview(optionsButton)
            optionsButton.anchor(top: topAnchor, left: nil, bottom: nil, right: rightAnchor, paddingTop: 12, paddingLeft: 0, paddingBottom: 0, paddingRight: 8, width: 20, height: 20)

            addSubview(commentLabel)
            commentLabel.anchor(top: topAnchor, left: profileImageView.rightAnchor, bottom: bottomAnchor, right: optionsButton.leftAnchor, paddingTop: 15, paddingLeft: 5, paddingBottom: 15, paddingRight: 8, width: 0, height: 0)

            addSubview(commentTimeLabel)
        commentTimeLabel.anchor(top: commentLabel.bottomAnchor, left: commentLabel.leftAnchor, bottom: nil, right: nil, paddingTop: 3, paddingLeft: 1, paddingBottom: 0, paddingRight: 0, width: 0, height: 0)



            optionsButton.isEnabled = true

            optionsButton.isUserInteractionEnabled = true

            commentLabel.isUserInteractionEnabled = true
        }

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

And here is the CommentViewController code that should be resizing the cell for me but it doesn't. I've used this before in the past so I'm not sure if I am missing anything


   func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {


           let frame = CGRect(x: 0, y: 0, width: view.frame.width, height: 50)
           let dummyCell = CommentCell(frame: frame)
           dummyCell.comment = comments[indexPath.item]
           dummyCell.layoutIfNeeded()

           let targetSize = CGSize(width: view.frame.width, height: 1000)
           let estimatedSize = dummyCell.systemLayoutSizeFitting(targetSize)

           let height = max(40 + 8 + 8, estimatedSize.height)
           return CGSize(width: view.frame.width, height: height)
    }


    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
        return 15
    }


You need to set

commentLabel.lineBreakMode = .byWordWrapping

By default it's set to .byTruncatingTail .

Also you may need to set .numberOfLines if you want to limit text to certain number of lines

After revisiting this issue, the problem was my constraints.

on

commentLabel.anchor

I changed it to

bottom: commentTimeLabel.topAnchor

and

optionsButton.anchor

changed bottom to

 bottom: bottomAnchor

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM