Zaimplementowałem kontroler widoku, który po prostu wyświetla pojedynczy obraz i pozwala użytkownikowi uszczypnąć, aby powiększyć/przesunąć obraz. Działa świetnie na iOS 7, ale w systemie iOS 8 ramka widoku przewijania ma inny rozmiar, a wynikiem końcowym jest zbyt duże powiększenie obrazu na iPhonie i zbytnie pomniejszanie na iPadzie podczas pracy w systemie iOS 8. Wynika to z tego, że Szerokość ramki przewijania wynosi 600pt, co jest jej wielkością w serii ujęć (Universal Storyboard przy użyciu klas wielkości). Mam jednak ograniczenia związane z autouzupełnianiem, które mają zapewnić rozciąganie widoku przewijania w celu wypełnienia dostępnej przestrzeni - powinno to być 768 punktów na iPadzie. Tak jest w przypadku iOS 7, ale nie iOS 8.Ramka UIScrollView ma inny rozmiar w systemie iOS 8 i iOS 7
Jest to konfiguracja: interfejs Builder, mam UIViewController
zawierający UIView
który zawiera UIScrollView
z contraints autoLayout spływu, prowadząc, dolny i górny przestrzeń do superview. Następnie w viewDidLoad
:
UIImage *image = [UIImage imageNamed:@"image"];
self.imageView = [[UIImageView alloc] initWithImage:image];
self.imageView.contentMode = UIViewContentModeScaleAspectFit;
self.imageView.frame = CGRectMake(0, 0, self.imageView.image.size.width, self.imageView.image.size.height);
[self.scrollView addSubview:self.imageView];
self.scrollView.contentSize = image.size;
#warning Bug here - scroll view frame is 600pt on iOS 8 - should be 768 for iPad
NSLog(@"scroll view frame wid: %f", self.scrollView.frame.size.width);
odkryłem jeśli mogę umieścić ten sam NSLog
w viewDidAppear
szerokość ramy jest prawidłowo 768pt. Próbowałem przenieść ten kod do viewWillAppear
zamiast viewDidLoad
, ale otrzymałem taki sam wynik - jest to również 600 w viewWillAppear
. Widok przewijania jest odpowiednio rozciągnięty, aby wypełnić ekran, ale dopiero po jego wyświetleniu na ekranie. Potrzebuję prawidłowego rozmiaru klatki, zanim obraz pojawi się na ekranie, dzięki czemu mogę obliczyć prawidłowe wartości maksymalnego i maksymalnego powiększenia.
Co mogę zrobić, aby to naprawić i upewnić się, że działa na iOS 7 i 8?
Kiedy mówisz „600pt, który jest jego wielkość w serii ujęć”, to dotyczy rozmiarze stałym ograniczeniem lub tymczasowy „zastępczy” wartość rzeczywista wielkość? –
@IanMacDonald Podczas korzystania z uniwersalnego storyboardu domyślnym rozmiarem sceny jest 600. Ponieważ widok przewijania rozciąga się, aby wypełnić szerokość/wysokość za pomocą autolayout, domyślnie jest równy 600, ale powinien rozciągać się, aby wypełnić cały rozmiar widoku. – Joey
Tak, rozumiem, że domyślny rozmiar to 600. Byłem ciekawy, czy twój widok przewijania zgłasza swoje 600 w jednym z tych dwóch pól, o których wspomniałem, lub czy był to tylko w polu obliczonej ramki. Czy widok przewijania ma widok superrozciągający? –