2015-06-15 4 views
0

Прости меня, если это уже ответили в другом месте, но я не мог найти нить об этом:Как установить UITextView в UIScrollView с AutoLayout

У меня есть VC со следующей иерархии:

enter image description here

Я хочу, чтобы мои элементы ContentView прокручивались в моем ScrollView. У меня много определений в textView, а некоторые более длинные, чем другие. Раньше прокручивались только более длинные определения, а более короткие - нет, но поскольку у меня был конфликт авто-макета, ссылки не могли быть нажаты в конце. У меня есть ScrollView, ограниченный представлением и ContentView, ограниченным ScrollView. У меня также есть ContentView с ограничениями equalWidth и equalHeight из основного представления. Для того, чтобы это решение работало, мне пришлось установить высоту ContentView примерно на 1000 pts, чтобы более длинные определения не были обрезаны. Единственная проблема заключается в том, что теперь все определения прокручиваются (даже те, которые не нужны), которые не имеют достаточного количества текста для перехода по экрану). И пользователь может прокручивать вниз и видеть достаточно свободного места для покрытия экрана, в зависимости от того, насколько кратким является определение.

Мой вопрос: как я могу организовать ограничения, чтобы более длинные определения прокручивались при необходимости, а более короткие - нет - как я могу установить ограничение динамически?

Благодаря

ответ

0

Если я правильно понять вас, это звучит, как у вас возникли проблемы с установкой содержимое вашего Scrollview таким образом, чтобы он прокручивается, когда предполагается, а не прокручивать, когда он не должен. Верный? Затем (при условии, что ваши ограничения установлены правильно) ваш контент contentSize scrollView должен быть установлен autoLayout на основе размера вашего содержимого.

Попробуйте установить свойство, чтобы динамически контролировать высоту содержимого. В вашем ViewController, создать свойство:

@property (nonatomic, strong) IBOutlet NSLayoutConstraint *contentViewHeight; 

Тогда, где бы вы настраиваете текст наклеек, вы должны рассчитать новые высоты, и обновить ограничение на его основе. For reference, here is a question regarding how to determine the height of text in a label.

После того как вы высоту вы можете установить это следующим образом:

self.contentViewHieight.constant = // Updated Height 
[self.view setNeedsUpdateConstraints]; 

Я надеюсь, что помогает. По моему собственному опыту, я ограничивал использование UIScrollView с тех пор, как он был обновлен для использования AutoLayout. В основном я использую UITableView & UICollectionView вместо этого.

+0

Спасибо, Арон. Да, это то, что я имею в виду; динамическое изменение размера содержимого. Вы сказали: «Предполагая, что ваши ограничения установлены правильно, contentSize вашего scrollView должен быть установлен с помощью автоматической компоновки ...» Я уверен, что все правильно подключено (нет проблем с автоматической компоновкой), и все это правильно изменяется на разных устройствах. Должно ли оно изменяться без явного свойства? Ручное изменение размера каждого текстового представления на самом деле не является решением для меня. – jdlace

+0

@jdlace Я не имел ввиду, что вам нужно динамически размер каждого textView. Вам просто нужно получить высоту всего содержимого в contentView и установить ограничение по высоте на нем. Однако теперь, когда я подумал об этом, он должен быть проще: вы не должны ограничивать размер contentView для представления. Вместо этого вы должны ограничить нижнее и конечное пространство элементом LAST в вашем scrollView. Если все правильно ограничено в вашем представлении содержимого, тогда, когда размеры вашего текстового вида растут так, общий размер содержащего представления. –

+0

Спасибо Арон.В настоящее время это мои ограничения: ScrollView (верхний, нижний, ведущий, конечный) в MainView. ContentView (верхний, нижний, верхний, конечный) для ScrollView AND equalWidth для MainView. Затем для textView в ContentView у меня есть (верхний, нижний, ведущий, конечный). Затем я устанавливаю свойство ограничения высоты с помощью self.textViewHeightConstraint.constant = [self.sourceInformation sizeThatFits: CGSizeMake (self.sourceInformation.frame.size.width, CGFLOAT_MAX)]. Height; Пока что у меня смешанные результаты; определенно изменяя размер динамически на основе текста, но все же не на 100%. Мысли? – jdlace

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