2015-05-05 8 views
0

Я добавил UIButton и UILabel в UIScrollView. Я добавил два ограничения на кнопку с помощью Auto Layout, и ни один из них не был отмечен ярлыком. Я вижу, как ярлык перемещается по экрану, но я не вижу, чтобы кнопка двигалась. Я полагаю, что это имеет какое-то отношение к ограничениям автоматического макета, которые я добавил к кнопке. Я бы хотел, чтобы кнопка прокручивалась так же, как я вижу ярлык, прокручивающийся по окну/экрану.UIButton не прокручивается при добавлении в UIScrollView

Ниже, как я настроить все:

_welcomeScroller = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)]; 
_welcomeScroller.userInteractionEnabled = YES; 
_welcomeScroller.scrollEnabled = YES; 
_welcomeScroller.showsHorizontalScrollIndicator = YES; 
_welcomeScroller.showsVerticalScrollIndicator = YES; 
#ifdef DEBUG 
[_welcomeScroller setBackgroundColor:[UIColor greenColor]]; 
#endif 
[self.view addSubview:_welcomeScroller]; 
CGSize welcomeScrollerSize = CGSizeMake(2000, 2000); 
[_welcomeScroller setContentSize:welcomeScrollerSize]; 

// add test label 
_test = [[UILabel alloc] initWithFrame:CGRectMake(200, 200, 200, 200)]; 
[_test setText:@"TEST"]; 
[_test setFont:[UIFont systemFontOfSize:44]]; 
[_test setBackgroundColor:[UIColor redColor]]; 
[_welcomeScroller addSubview:_test]; 

// add about btn to lower right 
_welcomeAbout = [UIButton buttonWithType:UIButtonTypeInfoDark]; 
[_welcomeAbout addTarget:self action:@selector(showAboutScreen:) forControlEvents:UIControlEventTouchUpInside]; 
[_welcomeAbout setTranslatesAutoresizingMaskIntoConstraints:NO]; 
[_welcomeScroller addSubview:_welcomeAbout]; 

NSLayoutConstraint *pullToBottom = [NSLayoutConstraint constraintWithItem:_welcomeAbout attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:_welcomeScroller.superview attribute:NSLayoutAttributeBottom multiplier:1.0 constant:-10.0]; 

NSLayoutConstraint *pullToRight = [NSLayoutConstraint constraintWithItem:_welcomeAbout attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:_welcomeScroller.superview attribute:NSLayoutAttributeRight multiplier:1.0 constant:-10]; 

[_welcomeScroller.superview addConstraints:@[pullToBottom, pullToRight]]; 

ответ

0

From Apple's technical note:

В общем, Auto Layout учитывающую сверху, слева, снизу и справа края в целях, чтобы быть видимые края. То есть, если вы привязаете вид к к левому краю своего супервизора, вы на самом деле привязываете его к минимальному значению x-значения границ супервизора . Изменение начала отсчета надписи не изменяет положение представления.

Класс UIScrollView прокручивает его содержимое, изменяя начало координат его границ. Чтобы сделать эту работу с помощью автоматического макета, верхний, левый, нижний, и правые края в прокрутке теперь означают края его содержимого .

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

решения компании Apple предлагает:

Создание простого вида UIView контента для вашего зрения прокрутки, которая будет размера вы хотите, чтобы ваше содержание, чтобы иметь. Сделайте его подчиненным видом прокрутки , но пусть он продолжит переводить маску авторезиста в ограничения.

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

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