iOS: UITextView обертывание UIImageView в CollectionViewCell

Я работаю UICollectionViewCell. Я хочу, чтобы я UITextViewобернул изображение профиля. Это дизайн:

введите описание изображения здесь

У меня проблемы с вызовами 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]
}

ios,swift,uicollectionview,uitextview,

0

Ответов: 0

iOS: UITextView обертывание UIImageView в CollectionViewCell

Я работаю UICollectionViewCell. Я хочу, чтобы я UITextViewобернул изображение профиля. Это дизайн:

введите описание изображения здесь

У меня проблемы с вызовами 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]
}
00ИОС, быстры, uicollectionview, UITextView,
Похожие вопросы
Яндекс.Метрика