我正在与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]
}