Я работаю 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,
Я работаю 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,