2013-03-26 17 views
6

Przeczytałem już informacje o wydaniu iOS6 i niektóre z tematów związanych z Autolayout + UIScrollview tutaj, ale mam dziwny błąd, którego nie potrafię rozwiązać.Wywołania funkcji Autouzupełnianie UIScrollView dziwne zachowanie

hierarchia widoku jest:

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

dodałem elementy w widoku poprzez interfejs Builder z autoLayout ON i przechowywane ograniczeń domyślnych.

Moja etykieta ma tekst dynamiczny, a jej wysokość jest niepotrzebna (liczba wierszy = 0 skonfigurowana w IB). Chcę, aby widok przewijania automatycznie dostosowywał się do wysokości widoku obrazu + etykiety.

Oto kod dla powiązanej klasy widok kontrolera:

- (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]; 
} 

Jak widać, Dodaję pionową ograniczenie dla widoku przewijania. Wygląda to działa dobrze, ale mam następujący komunikat w konsoli:

2013-03-26 16: 24: 49.072 testu [34704: 11303] Nie można jednocześnie spełniać ograniczeń. Prawdopodobnie przynajmniej jedno z ograniczeń na poniższej liście jest takie, czego nie chcesz. Spróbuj tego: (1) spójrz na każde ograniczenie i spróbuj ustalić, czego się nie spodziewasz; (2) znajdź kod , który dodaje niepotrzebne ograniczenie lub ograniczenia i napraw je. (Uwaga: Jeśli widzisz NSAutoresizingMaskLayoutConstraints że nie rozumieją, należy zapoznać się z dokumentacją dla właściwości UIView translatesAutoresizingMaskIntoConstraints) ( „”, „”)

będzie próbował odzyskać, łamiąc ograniczenia

a teraz konkretny bug: Gdybym wskaż w dół, a potem kliknij na zdjęcie, aby przejść do drugiego widoku, a następnie kliknij przycisk wstecz, aby powrócić do bieżącego widoku, widok przewijania wola zaczyna się od poprzednia pozycja, ponieważ była górną częścią v iew. I nie będę w stanie przewijać, aby zobaczyć widok.

przykro mi, że nie ma wystarczającej reputacji do zamieszczania zdjęć, ale można pobrać przykładowy projekt tutaj, aby odtworzyć błąd: https://docs.google.com/file/d/0B-sCDWMvn-KGS19sUkZnUFdWWTg/edit?usp=sharing

Dzięki za pomoc, Lukas

EDIT Obejście problemu: tutaj: UIScrollView wrong offset with Auto Layout

Odpowiedz

1

Zgodnie z komunikatem w konsoli. Twoje ograniczenia pionowe z konfliktu XIB z ograniczeniami dodanymi w kodzie. Jeśli chcesz zmienić pionową przestrzeń między imageView i label, zrób to na XIB.

Za błąd. Oto rozwiązanie tap here.

+0

Dzięki, jest to ten sam błąd, co opis podany w linku. Obejścia są tam zapewnione. – lukas