2015-02-05 4 views
2

Я попытался установить простой вид, который отображает текстовую статью с заголовком. Вот шаги, которые я сделал:Каков правильный способ использования UIScrollView?

  1. Create View Controller с его .xib файл
  2. Создать UIScrollView и помещает UIView непосредственно в качестве обертки содержимого,
  3. Установите ограничения [scrollview]-0-[superview] в верхней части, нижней, ведущей и задней.
  4. Установите ограничения [content wrapper]-0-[scroll view] сверху, снизу, впереди и позади.
  5. Установите ширину и высоту в оболочку содержимого в качестве заполнителя.
  6. Добавить Label и UITextView в качестве представлений оболочки содержимого.
  7. Добавить ограничения в подвид.
  8. Следующее this tutorial, я программно устанавливаю вывод верхнего содержания обложки контента = scrollview влево,
  9. ... И верхний вид обложки обертки содержимого.

Когда я запускал код, он отлично показывает все на своем месте; В UIScrollView прокручивается, поля правильно установлены и т.д.

Однако Xcode генерирует исключение:

2015-02-05 18:06:58.230 ScrollViewApp[5353:180401] Unable to simultaneously satisfy constraints. 
    Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSLayoutConstraint:0x7ff9fa49a3f0 H:[UIView:0x7ff9fa571560(600)]>", 
    "<NSLayoutConstraint:0x7ff9fa49b1a0 H:|-(0)-[UIView:0x7ff9fa571560] (Names: '|':UIScrollView:0x7ff9fa49a910)>", 
    "<NSLayoutConstraint:0x7ff9fa49ce00 H:|-(0)-[UIScrollView:0x7ff9fa49a910] (Names: '|':UIView:0x7ff9fa49a840)>", 
    "<NSLayoutConstraint:0x7ff9fa61c050 UIView:0x7ff9fa571560.right == UIView:0x7ff9fa49a840.trailing>", 
    "<NSLayoutConstraint:0x7ff9fa580970 'UIView-Encapsulated-Layout-Width' H:[UIView:0x7ff9fa49a840(375)]>" 
) 

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x7ff9fa49a3f0 H:[UIView:0x7ff9fa571560(600)]> 

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger. 
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful. 

После дальнейшего прибегая к помощи, я обнаружил, что можно проигнорировать предупреждение, установив ширину содержимого обертку (см шаг 5 выше) приоритет - низкий; однако он разбивает макет в построителе интерфейса. Посмотрите:

Content wrapper's width constraint set to low priority

По сравнению с тем, когда он установлен высокий приоритет:

Content wrapper's width constraint set to HIGH priority

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

Я пытаюсь понять, как работает UIScrollView, но, может быть, я что-то не понимаю; так, Каков правильный способ настройки UIScrollView для работы, как ожидалось?

+0

Попытка добавить центра по горизонтали ограничение от вашего контента обертку на ваш взгляд прокрутки. –

+0

@JadFeitrouni, вы правы; он действительно решает проблему выше! Но я удивляюсь, почему, хотя .. Из журналов ошибок нет никакого способа правильно определить «Мне нужно добавить горизонтальное ограничение центра». Как лучше решить эти проблемы? – dvdchr

+0

Честно говоря, я действительно не знаю, почему это работает, я понял, что это из-за ошибки. Если вы хотите, чтобы ваше представление совместимо с разными размерами экрана, удалите ограничение ширины обертки содержимого. –

ответ

1

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

0

вы можете использовать scrollview следующим образом. Добавьте scrollview в дизайн. Дайте ему левые, верхние, правые, нижние ограничения в дизайне. Добавьте свои просмотры в scrollview. Добавьте соответствующие ограничения для них. Нет необходимости добавлять ограничения в код. В viewDidLayoutSubviews задайте размер содержимого scrollview. - (Недействительными) viewDidLayoutSubviews {

[super viewDidLayoutSubviews]; 
CGRect boundsOfSelf = self.view.bounds; 
scrollView.frame = boundsOfSelf; 
[scrollView setContentSize: boundsOfSelf.size]; 

}

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