2013-03-26 3 views
6

Я уже читал заметки о выпуске iOS6 и некоторые связанные темы для Autolayout + UIScrollview здесь, но у меня есть странная ошибка, я не знаю, как ее решить.Autolayout Ограничения UIScrollView странное поведение

иерархия мнение, заключается в следующем:

- View 
-- UIScrollView 
---- UIImageView 
---- UILabel 

Я добавил элементы в представлении с помощью Interface Builder, с Autolayout ON и все ограничения по умолчанию.

Мой ярлык имеет динамический текст и его высота расходуется (количество строк = 0 настроено в IB). Я хочу, чтобы вид прокрутки автоматически адаптировался к высоте представления изображения + метки.

Вот код для соответствующего класса контроллера представления:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.scrollView.translatesAutoresizingMaskIntoConstraints = NO; 
    self.imageView.translatesAutoresizingMaskIntoConstraints = NO; 
    self.label.translatesAutoresizingMaskIntoConstraints = NO; 

    self.imageView.image = [UIImage imageNamed:@"image.png"]; 

    self.label.text = @"Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text Text text END"; 
    [self.label sizeToFit]; 

    NSDictionary *viewsDictionnary = NSDictionaryOfVariableBindings(scrollView, imageView, label); 
    [self.scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[imageView]-20-[label]-10-|" options:0 metrics:0 views:viewsDictionnary]]; 

    self.imageView.userInteractionEnabled = YES; 
    [self.imageView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap)]]; 
} 

- (void)tap 
{ 
    [self.navigationController pushViewController:[self.storyboard instantiateViewControllerWithIdentifier:@"View2"] animated:YES]; 
} 

Как вы можете видеть, я добавляю вертикальное ограничение для вида прокрутки. Это, кажется, работает хорошо, но у меня есть следующее сообщение в консоли:

2013-03-26 16: 24: 49.072 тест [34704: 11303] Невозможно одновременно удовлетворяют ограничениям. Вероятно, по крайней мере одно из ограничений в следующем списке - это тот, который вы не хотите. Попробуйте следующее: (1) посмотрите на каждое ограничение и попытайтесь выяснить, чего вы не ожидаете; (2) найти код , который добавил нежелательные ограничения или ограничения и исправить. (Примечание: Если вы видите, что вы NSAutoresizingMaskLayoutConstraints не понимают, обратитесь к документации для свойства UIView translatesAutoresizingMaskIntoConstraints) ( «», «»)

будет пытаться восстановить разбив ограничение

а теперь конкретная ошибка: Если я прокручиваю к вниз, то я нажимаю на изображение, чтобы перейти на вторую точку зрения, и нажмите кнопку назад, чтобы вернуться к текущему виду, вид прокрутки начинается от прецедентная позиция, поскольку она была вершиной v МЭН. И я не смогу прокрутить, чтобы увидеть вид.

Я сожалею, что не хватает репутации размещать изображения, но вы можете скачать образец проекта здесь, чтобы воспроизвести ошибку: https://docs.google.com/file/d/0B-sCDWMvn-KGS19sUkZnUFdWWTg/edit?usp=sharing

Спасибо за помощь, Lukas

EDIT Обход проблемы для ошибки здесь: UIScrollView wrong offset with Auto Layout

ответ

1

В соответствии с сообщением в консоли. Ваши вертикальные ограничения от xib противоречат ограничениям, которые вы добавили в код. Если вы просто хотите изменить вертикальное пространство между imageView и label, тогда сделайте это в xib.

Относительно вас ошибка. Вот решение tap here.

+0

Спасибо, это такая же ошибка, как описано в ссылке, которую вы дали. Там применяются обходные пути. – lukas

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