23

Я пытаюсь разместить UITextView внутри UIScrollView с помощью AutoLayout без везения. То, что я попробовал это,UITextView внутри UIScrollView с AutoLayout

  • Я поместил UIScrollView внутри главного вида в раскадровке
  • Я поместил UITextView внутри UIScrollView в раскадровке и инвалиды скроллинг Включено
  • Я установил ограничение (ведущий, задний, сверху, снизу) на UIScrollView
  • Я установил ограничение (верх, ведущий, задний, высоту) на UITextView
  • я создал IBOutlet высоты скованности UITextView
  • я установил текст (много текста, который может привести к прокрутка) в UITextView в viewDidLoad()
  • Я установил ограничение по высоте UITextView с помощью кода ниже. Я попробовал его сразу же после установки текста в viewDidLoad() и viewDidLayoutSubviews() не повезло

self.textViewHeightConstraint.constant = [self.textView sizeThatFits:CGSizeMake(self.textView.frame.size.width, FLT_MAX)].height;

UITextView становится все его высоты, но UIScrollView не является. Я что-то пропустил?

+0

Другое дело, следует отметить, что вы можете 'UITextView .scrollEnabled = false' – onmyway133

ответ

66

После нескольких дней исследований и грязных рук с помощью UIScrollView + UITextView + Auto Layout я успешно получил полностью работающий UIScrollView. Я хочу поделиться своим решением на случай, если кто-то застрянет в той же ситуации.

  1. Добавить UIScrollView в главном окне в раскадровке
  2. Добавить UIView внутри UIScrollView
  3. Добавить UITextView внутри UIView (вид, добавленный в шаге 2)
  4. Убедитесь, что "прокрутка Enabled" из UITextView является бесконтрольно
  5. Добавьте 4 ограничения (ведущий, задняя, ​​верхняя, нижняя) на UIScrollView
  6. Добавьте 4 ограничения (ведущий, задняя, ​​верхняя, нижняя) на UIView (вид, добавленный в шаге 2)
  7. Добавьте ограничение «Width Equally» на UIView (вид, добавленный на шаге 2) и основной вид
  8. Добавьте 5 ограничений (ведущий, конечный, верхний, нижний, высота) в UITextView. После этого шага вы не должны получать никаких ошибок и предупреждений об ограничениях.
  9. Добавить ограничение UITextView по высоте IBOutlet на ViewController. @property (nonatomic, weak) IBOutlet NSLayoutConstraint *textViewHeightConstraint; и подключите его к Storyboard
  10. Программно изменить ограничение высоты UITextView. self.textViewHeightConstraint.constant = [self.textView sizeThatFits:CGSizeMake(self.textView.frame.size.width, CGFLOAT_MAX)].height;

После всех этих 10 шагов вы получите полностью рабочий UIScrollView с UITextView внутри и будьте счастливы.

+0

, если у вас много просмотров и если вы не хотите всегда создавать файлы классов viewcontroller. Вы можете изменить textView Height = Greater or or Equal 600 из Equal 600! – emresancaktar

+2

Короче говоря, важная часть здесь, так как я могу подтвердить, когда у меня была такая же проблема, нужно добавить простой UIView внутри UIScrollView, а затем поместить все элементы внутри этого UIView, а не в UIScrollView. В противном случае многострочные UITextViews внутри Scrollview не будут автоматически настраивать их ширину и высоту правильно. –

+0

Я не могу редактировать textField с таким подходом, кажется, что scrollview переопределяет события касания:/ – OxenBoxen

7

Кажется, что у этого вопроса есть ответ, который сработал для многих людей. Тем не менее, следует отметить, что documentation гласит:

Размещение текста вид изнутри вид прокрутки. Текстовые представления обрабатывают собственную прокрутку. Вы не должны вставлять объекты просмотра текста в представления прокрутки.Если вы это сделаете, может возникнуть непредвиденное поведение, потому что события касания для двух объектов могут быть перемешаны и неправильно обработаны.

Прежде чем пытаться установить UITextView в UIScrollView, следует подумать, действительно ли это необходимо. Если текстовое представление является частью сложной компоновки в прокрутке, обратите внимание на использование контейнера UIView в принятом ответе.

Смотрите также: Scroll Views Inside Scroll Views

+1

Он отлично работает, когда прокрутка Text View отключена. – n13

0

Я работаю пример того, как рассчитать высоту для UITextView динамической высоты + он внутри UIStackView который находится внутри UIScrollView здесь: https://github.com/fassko/ScrollStackViewExample

Смежные вопросы