Как добавить картинку в TextView


#1

Как в textView добавить картинку:slight_smile:


#2
class ViewController: UIViewController {

    @IBOutlet weak var textView: UITextView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let imageView = UIImageView(image: UIImage(named: "img")!)
        imageView.frame = CGRect(x: 20, y: 20, width: 100, height: 100)
        
        textView.textContainer.exclusionPaths = [UIBezierPath(rect: imageView.frame)]
        textView.addSubview(imageView)
    }

}


#3

хм, картинка отрисовывается поверх текста. Как тогда сделать так, чтобы текст перемещался на размер картинки?


#4

Он и так перемещается, выставите:

imageView.clipsToBounds = true

Что бы картинка не вылезала за пределы imageView.


#5

что бы картинка плавала с текстом - через attributed string NSTextAttachment


#6

По каким-то причинам этого не происходит. При первом рендере экрана текст появляется снизу картинки, но через долю секунды запрыгивает под нее, так что картинка закрывает текст. clipsToBounds не помог.


#7

Если вы пытаетесь воткнуть картинку с позицией (x: 0, y: 0) и шириной во весь экран, я вас поздравляю вы нашли баг :slight_smile:

Попробуйте так:

textView.text = "\n" + textView.text

#8

И если вы не редактируете текст в вашем TextView лучше используйте UILabel+UIScrollView: https://yadi.sk/d/N0mRKxQG3G949T


#9

почему-то по второй схеме (где UILabel+UIScrollView) навбар вдруг стал прозрачным и контент стал скроллиться сквозь тайтл. Пришлось опустить scrollview ниже, (соответственно сместился весь контент на размер navBar-а, иначе констрейнты не сходятся) и добавить self.automaticallyAdjustsScrollViewInsets = false


#10

Если добавлять через NSTextAttachment то какие-то проблемы с ресайзом. И не могу в коде найти свойство contentMode чтобы выставить AspectFit или AspectFill для вставляемой картинки.

К примеру мне надо, чтобы высота картинки составляла 0,6 от ширины, а ширина была равна ширине экрана:

imageAttachment.image = UIImage(named: “MyImage”)
let size = CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.width*0.6)
imageAttachment.bounds = size

В итоге картинка появляется и ее frame какой надо, но контент картинки не вписывается в эти рамки, а просто уходит за пределы экрана. Не понятно как подогнать картинку под заданный размер.


#11

создавай новую картинку нужного размера каждый раз, когда надо изменить размер + imageAttachment.bounds = size


#12

Спасибо, получилось. Можно ли как-то выравнивание этой картинки сделать по центру textView? На разных диагоналях она по разному отображается. Пробовал задать ей ширину равную textView.frame.width и пропорциональное изменение высоты. Или textView.contentSize.width, и соответствующие .bounds но так не пашет. Картинка уходит за размеры textView


#13

делаешь допустим bounds = (width: textview.width, height: width*0.6). теперь создаешь картинку под bounds. если картинка не влазиет в bounds то уменьшаешь ее пропорционально. потом эту маленькую картинку делаешь широкой\узкой, пустые места заполняешь прозрачностью

что то такое

----------------
|     |    |    |
----------------