2013-07-29 2 views
2

Мне очень не нравится спрашивать здесь, потому что я обычно стараюсь самостоятельно разобраться. Но на этом я застрял целыми днями и не могу найти решение в любом месте в Интернете.Изменение размера UITextView в UIScrollView с использованием проблемы автоматического макета

У меня есть ScrollView, содержащий несколько подзонов. У меня есть изображение и две метки сверху с фиксированными высотами. Затем есть UITextView и еще один ImageView (см. Рисунки).

Я добавляю текст в текстовое представление программно, поэтому он должен иметь динамическую высоту, а ImageView должен перемещаться вниз, чтобы вы могли прокручивать. Я не хочу, чтобы TextView был прокручиваемым сам по себе, но я хочу, чтобы все подпункты также перемещались.

Я знаю, что смогу решить эту проблему, используя ограничения. Но я чувствую, что пробовал все, и ничего не получилось. Он работал, когда я отключил автоматическую компоновку и вручную переместил представления. Мне интересно, есть ли лучший способ.

enter image description here

Как вы можете видеть, что я прикрепил TextView к ImageView выше, с 1000 приоритетом и на ImageView ниже с 1000 приоритетом. Ограничение высоты не может быть удалено, поэтому я устанавливаю его на наименьший возможный приоритет. ImageView внизу закреплен на нижней части супервизора с абсолютной высотой. Его ограничение по высоте также имеет низкий приоритет. (Я могу опубликовать изображение ограничений ImageView, если это помогает) Я также попытался адаптировать фрейм программно, но это плохо работает в сочетании с автоматической компоновкой. (Если это поможет, я могу, конечно, опубликовать код)

Что я делаю неправильно? Должен ли я просто отключить автоматический макет и сделать это вручную? Мне это кажется нечистым. Можно ли это сделать?

Я очень ценю вашу помощь :) здоровается, Jan

+0

Я сегодня борюсь с той же проблемой. Мое решение состояло в том, чтобы вырезать 'UIScrollView' и вместо этого использовать' UITableView'. Затем перетащите одиночный 'UIView' в' UITableView', создав таким образом заголовок таблицы. «UIView», являющийся контейнером заголовка таблицы, не требует никаких ограничений, а дети могут иметь свои ограничения относительно заголовка таблицы. Я уверен, что это взломать, но, по крайней мере, это работает. –

ответ

0

Проблема является установка высоты. Вы как-то должны попытаться удалить его. Если вы добавили другие ограничения, которые являются «достаточными», они должны стать удаляемыми.

В настоящее время у вас есть одно ограничение пользователя для высоты, которая является «Большим или равным» и ограничением «Равно». Ясно, что они плохо работают вместе.

Возможно, есть и концептуальная ошибка. Нижний вид изображения не должен фиксироваться в нужном положении, поэтому расстояние до нижнего изображения не будет «достаточным» ограничением, позволяющим удалить фиксированную высоту.

Я думаю, что он должен работать, если

  • нижний вид изображения имеет фиксированную высоту и
  • фиксированное расстояние в текстовом виде выше, и
  • вид текста имеет минимальную высоту а также
  • фиксированное расстояние до изображения ниже
  • (что должно быть исправлено в отношении надзора).
+0

Спасибо за ваш ответ. Проблема в том, что второе ограничение высоты добавляется снова каждый раз, когда я меняю его на «больше или равно», поэтому у меня есть два ограничения. Нижний ImageView имеет: - Фиксированное расстояние до TextView - Фиксированная высота - фиксированная маржа в нижней части представления прокрутки. Я думаю, что все ваши очки уже выполнены, за исключением того, что ограничение высоты не может быть удалено. Однако я не понимаю, почему. Вот изображение ограничений ImageView: http://pl.vc/18oiq – JWKothe

+0

Исправлено нижнее пространство вашего изображения для наблюдения. Правильно ли изменен размер надстройки? Если нет, это предотвратит размер текстового представления. Также проверьте [this] (http://stackoverflow.com/q/8704361/427083). – Mundi

+0

Это точно точка. Супервизор - это scrollView, поэтому свойство contentSize, вероятно, необходимо изменить. Как мне это сделать? Только программно или есть способ позволить IB позаботиться об этом? Спасибо за вашу помощь! – JWKothe

1

Убедитесь, что атрибут Scrolling Enabled на UITextView не установлен в Interface Builder. Я считаю, что система Auto Layout учитывает это, когда вычисляет внутренний размер содержимого.

+0

Это действительно так ... Почему? Upvoted. – Andrew

1

Если кто-то борется с подобной проблемой: Это то, что я в конечном итоге делает:

  • Удалить все подвидов из ScrollView в IB
  • Программным добавить один UIView к ScrollView.
  • Добавить все виды на UIView в качестве подвидов (переместить их с помощью setFrame)
  • Установите кадр из UIView соответственно к подобозрению
  • Набора contentSize в Scrollview к размеру UIView.

Немного больше работы, но это, в конце концов, работает. Это следует за рекомендациями по смешанному подходу Apple, которые можно увидеть здесь (см. UIScrollView): http://developer.apple.com/library/ios/#releasenotes/General/RN-iOSSDK-6_0/index.html

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