UITextView sizeThatFits дает слишком короткий ответ в Swift

Когда вы пытаетесь выполнить sizeThatFits в UITextView, если вы затем установите высоту указанного UITextView в результат, то он будет слишком коротким! Этот ответ:

Размер содержимого UITextView слишком мал

Также кажется, что это не так, поскольку, если вы исследуете свойство contentInset текстового представления, все contentInset установлено в нули.


person Pete.Mertz    schedule 18.03.2015    source источник


Ответы (1)


Ключ использует textContainerInset, а не contentInset. Это даст вам правильный буфер сверху и снизу, который вы ищете. Итак, вы получите что-то вроде:

textView.text = "Some multiline text";
let size: CGSize = textView.sizeThatFits(CGSizeMake(textView.frame.size.width, CGFloat.max));
let insets: UIEdgeInsets = textView.textContainerInset; 
textViewHeight.constant = size.height + insets.top + insets.bottom;

Также важно отметить, что этот метод должен вызываться после рендеринга UITextView. Другими словами, изначально я изменял его размер в методе viewDidLoad контроллера, тогда как на самом деле он должен был быть в viewDidAppear. Это раздражает, так как представление уже отображается, но я решил эту проблему, затухая несколько для лучшей эстетики.

person Pete.Mertz    schedule 18.03.2015
comment
Благодарность!! Я переопределяю viewDidLayoutSubviews() в своем контроллере представления и вызываю метод, который работает безупречно! ранее я вызывал метод в viewDidLoad и удивлялся, почему он не работает! - person user3162662; 07.12.2015