2013-10-09 3 views
5

В this technical Note Apple заявляет, что вы можете сделать подзаголовок UIScrollView фиксированным/плавающим, добавив ограничения в супервизор UISCrollView. Я пробовал это, но я делаю что-то неправильно, и я не могу понять, в чем проблема.Фиксированный/плавающий вид в UIScrollView с AutoLayout

Обратите внимание, что вы можете сделать подвид в целях прокруток появляется плавать (не прокручивать) над другим содержанием прокрутки путем создания ограничений между видом и видом снаружи поддерева отображения вида скроллинга, такие как надтаблицы отображения вида скроллинга ,

Это то, что я сделал. У меня есть UIScrollView уже настроил и попытаться добавить фиксированный вид на верхнюю часть Scrollview как следующее:

_testOverlay = [[UIView alloc] init]; 
_testOverlay.backgroundColor = [UIColor blueColor]; 
_testOverlay.translatesAutoresizingMaskIntoConstraints = NO; 
[self.scrollView addSubview:_testOverlay]; 

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[_testOverlay]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_testOverlay)]]; 
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_testOverlay(64)]-(>=0)-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_testOverlay)]]; 

Однако, это не работает, добавленный вид будет двигаться вместе с Scrollview и не «поплавок». Какие-нибудь идеи здесь не так?

ответ

6

между видом и зрения внешнего поддерева отображения вида скроллинга, SuperView, такие как мнение о скроллинга.

Эта деталь крайне важна. self.scrollView - это вид сверху _testOverlay. Таким образом, в @"|[_testOverlay]|" вертикальные бары ссылки self.scrollView. Вы должны заменить это ограничение на ограничение между _testOverlay и (я полагаю) self.view. Я не уверен, возможно ли это на языке визуальных форматов, но вы, безусловно, можете сделать это с помощью constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant. Это будет так (я не буду публиковать весь код, потому что это looong):

[self.view addConstraint:[NSLayoutConstraint 
          constraintWithItem:self.view 
          attribute:NSLayoutAttributeLeft 
          relatedBy:NSLayoutRelationEqual 
          toItem:_testOverlay 
          attribute:NSLayoutAttributeLeft 
          multiplier:1.0 
          constant:0]]; 
+0

Это сделало трюк! Я подумал, что просмотр языка визуального формата называется «|» это представление, к которому я добавляю ограничение. Спасибо! –

+1

Как я могу это сделать, если мой 'self.view' является' UITableView' и не имеет супервизора? – Eimantas

0

Добавить представление оверлея для просмотра списка прокрутки, а не просмотра прокрутки.

[self.view addSubview:_testOverlay]; 
Смежные вопросы