2013-04-18 4 views
8

Я использую autolayout, чтобы изменить высоту моего scrollview. Я добавляю subviews в scrollview, где я вручную увеличиваю размер содержимого. Но когда я получаю событие, когда я собираюсь изменить высоту, размер содержимого равен нулю.Содержимое UIScrollView сбрасывается до нуля при использовании автоматического макета

Вот код:

-(void) addTag:(NSString *)tagName { 

    ... 
    [button addTarget:self action:@selector(tagPressed:) forControlEvents:UIControlEventTouchUpInside]; 
    [self setContentSize:CGSizeMake(self.frame.size.width, self.contentSize.height+60)]; 
    [self.items addObject: button]; 
    NSLog(@"content height: %0.2f", self.contentSize.height); 


} 

Консоль вывода:

2013-04-18 18:23:06.106 TouchSelectApp[19944:c07] content height: 120.00 

Здесь я вывести contentSize:

- (void)tagPressed:(UIButton *)sender { 

    NSLog(@"1 content height: %0.2f", self.contentSize.height); 
    ... 
} 

Консоль показывает:

2013-04-18 18:17:24.747 TouchSelectApp[19944:c07] 1 content height: 0.00 

Я не почему высота содержимого устанавливается равным нулю. Помоги мне!

Обновление: вот проблема, которую я пытаюсь решить.

У меня есть свиток с кнопками. Сначала он показывает только одну кнопку. Когда нажимается кнопка, вызывается tagPressed:. Тег «Нажатие» изменяет высоту, чтобы отобразить все кнопки. Затем, когда пользователь выбирает кнопку, высота прокрутки изменяется на оригинал, а смещение устанавливается на начало кнопки. Приведенный ниже код работает, но анимация ошибочна. Если я изменил смещение и перед блоком анимации, он просто устанавливает смещение в ноль.

- (void)tagPressed:(UIButton *)sender { 

    CGPoint p; 
    float maxHeight = self.items.count * 60; 


    if (self.height.constant == maxHeight) { 
     self.height.constant = 60; 
     p = CGPointMake(0, sender.frame.origin.y-5);  
    }else { 
     self.height.constant = maxHeight; 
     p = CGPointMake(0, 0); 
    } 

    [self.superview setNeedsUpdateConstraints]; 

    [UIView animateWithDuration:0.5f animations: ^{ 
      [self.superview layoutIfNeeded]; 
    } completion:^(BOOL finished) { 
      [self setContentOffset:p]; 

    }]; 

}

+0

Я обновлю сообщение с оригинальной проблемой. –

+0

Я не понимаю, зачем вам вообще нужен прокрутка. У вас есть представление, что либо показывает одну кнопку, либо показывает все кнопки; где прокрутка? Просто используйте представление, изменяющее размер. Еще лучше, просто покажите и спрячьте, и кнопки по мере необходимости, возможно. – matt

+0

Обратите внимание, что вид прокрутки позволяет прокручивать * пользователь *. * Вы можете прокручивать (т. Е. Показывать одну конкретную кнопку) без прокрутки, поэтому, если это все, что вы пытаетесь сделать, я бы предложил избегать просмотра прокрутки, что добавляет много осложнений, которые вам не нужны (насколько это возможно как я могу сказать). – matt

ответ

10

Если вы используете автоматическую раскладку с UIScrollView, вы не установите contentSize свойство. См. here для получения дополнительной информации (прокрутите вниз до раздела по адресу UIScrollView).

+2

Я действительно пытаюсь изменить смещение содержимого. Как я могу это сделать? –

+2

Вы можете установить ContentSize в ViewDidLayoutSubviews.Это работает нормально для меня, используя Autolayout т.е. - (Недействительными) viewDidLayoutSubviews { [_scrollView setContentSize: CGSizeMake (_scrollView.width подсчитывать * [_imageViews], 0)]; } – Yasper

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