2015-07-10 4 views
0

У меня есть ViewController. В нем я поместил ScrollView с View (contentView). Позже я перетаскиваю из contentView в View и устанавливаю Equal Height. Теперь он прокручивается, но не полностью.UIScrollView не прокручивает полностью

enter image description here

enter image description here

Как вы видите, есть она по-прежнему ниже TextView, но не прокручивается. Как я могу это исправить?

+0

Вы установите contentsize в Scrollview? – Leo

+0

@Leo no. Я хочу сделать это автоматически, но не знаю, как это сделать. Вы можете мне помочь? –

+0

Поскольку он использует автоматический макет, ему не нужно устанавливать contentSize. Вы устанавливаете высоту contentView как равную высоте представления, почему она должна прокручиваться? –

ответ

0

Необходимо установить содержимое прокрутки. Используйте приведенный ниже код, чтобы сделать это:

func viewDidLayoutSubviews() 
{ 
    super.viewDidLayoutSubviews() 
    self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width, self.contentView.frame.size.height); 

} 
+0

мне это не помогает. Должен ли я удалить свое ограничение - Равная высота или нет? Я удаляю его, и он вообще не прокручивается. –

+0

@OrkhanAlizade. Для contentView вам просто нужно установить ограничение перспективы для прокрутки. Top = Bottom = Left = Right = 0 –

+0

да, я сделал точно то же самое –

0

Чтобы использовать Autolayout с UIScrollView сложно.

В своем коде вы должны обновить ограничение высоты для contentView путем расчета высоты subviews из contentView и будет автоматически обновлять contentSize для вашего ScrollView и вы можете пролистать все подвиды.

Для получения дополнительной информации по использованию Autolayout + UIScrollView ваш может читать this.

0

UIScrollView способен автоматически вычислять его высоту и ширину контента, но вам нужно помочь в этом. Для этого вам необходимо:

  1. Bound contentView (в вашем случае) ко всем сторонам надтаблицы (который Scroll View).
  2. Адрес: contentView Чтобы рассчитать его размеры. Вот небольшая ошибка в вашем подходе. Вы установили высоту contentView, равную высоте View. Таким образом, в основном содержание Scroll ViewSize.height совпадает с высотой View. Это не то, что вы хотите с динамическим контентом.

Обычно вы хотите установить ширину contentView равной View «s ширины и не устанавливать contentView» высоту s. Вместо этого вы хотите связать subviews contentView с их супервизором таким образом, чтобы их супервизор (contentView) автоматически вычислил его высоту.

В вашем случае я бы связать:

  • pizza.jpg в левой верхней правой надтаблицы (высота pizza.jpg будет установлен от собственного размера изображения);
  • SAMPLE TITLE ярлык - слева направо для наблюдения; наверх до pizza.jpg image;
  • Text View - left-bottom-right для наблюдения; до SAMPLE TITLE этикетка; установите фиксированную высоту.

В этом случае contentView определит необходимую высоту самостоятельно. Scroll View соответственно установит contentSize. И ваш экран будет иметь возможность прокрутки по вертикали (оно должно быть);)

0

Согласно this link (спасибо this Matt's answer first), UIScrollView действует по-разному с AutoLayout, чем другие взгляды.

Подвижности scrollView устанавливают свои ограничения из contentView прокрутки, а не прокрутки. Это позволяет прокручивать содержимое.

Итак:

  1. Добавить UIView в свой Scrollview, это будет представлять contentView вашего Scrollview. Добавьте ограничения в верхнюю, нижнюю, конечную, ведущую от представления к ее супервизу.
  2. Интерфейс Builder жалуется. Здесь вы видите разницу между базовым представлением и scrollView. Причина в том, что contentView должен быть заполнен, чтобы знать его размер. Поэтому добавьте равную ширину из contentView в scrollView
  3. ContentView теперь знает свою ширину, но не ее высоту. Поэтому добавьте свои метки и ваш UIImage в качестве подзаголовков contentView. Добавьте ограничения сверху вниз. Не пропустите добавление ограничения высоты в UIImageView.

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

enter image description here

Надеется, что это помогает

Read this (from Matt once again) для получения более подробной информации