iOS:UITextView将UIImageView包装在CollectionViewCell中

时间:2018-06-29 12:57:33

标签: ios swift uicollectionview uitextview

我正在与UICollectionViewCell合作。我希望我的UITextView包裹个人资料图片。那是设计:

enter image description here

我在调用textContainer.exclusionPaths = [imagePath]时遇到问题,因为它总是.zero。我创建了一个观察者来观察UIImageView.layer.frame中的更改,但是我没有用。

我正在使用SnapKit。那是我的代码:

// MARK: Bindings
override func setupBindings() {
    super.setupBindings()

    pictureFrameSizeObserver = pictureImageView.observe(\UIImageView.layer.frame, options: [NSKeyValueObservingOptions.new]) { [weak self] (_, _) in
        self?.updateTextViewFrame()
    }
}

// MARK: Layout
override func setupLayout() {
    super.setupLayout()

    contentView.addSubview(pictureImageView)
    contentView.addSubview(titleLabel)
    contentView.addSubview(positionLabel)
    contentView.addSubview(descriptionTextView)

    pictureImageView.clipsToBounds = true
    pictureImageView.layer.cornerRadius = Sizes.speakerPictureCornerRadius

    pictureImageView.snp.makeConstraints { make in
        make.top.right.equalToSuperview().inset(Margins.medium)
        make.size.equalTo(Sizes.speakerPictureSize)
    }

    titleLabel.snp.makeConstraints { make in
        make.top.left.right.equalToSuperview().inset(Margins.medium)
    }

    positionLabel.snp.makeConstraints { make in
        make.left.right.equalToSuperview().inset(Margins.medium)
        make.top.equalTo(titleLabel.snp.bottom)
    }

    descriptionTextView.textContainerInset = .zero
    descriptionTextView.textContainer.lineFragmentPadding = Sizes.zero
    descriptionTextView.snp.makeConstraints { make in
        make.left.right.bottom.equalToSuperview().inset(Margins.medium)
        make.top.equalTo(positionLabel.snp.bottom).offset(Margins.default)
    }
}

private func updateTextViewFrame() {
    let imagePath = UIBezierPath(rect: {
        var frame = pictureImageView.frame
        frame.size.height += Margins.default
        frame.size.width += Margins.default
        return frame
    }())
    descriptionTextView.textContainer.exclusionPaths = [imagePath]
}

0 个答案:

没有答案