Używam widoku UIScrollView jako mojego przewijania stronicowania, pagesScrollView
. Wewnątrz tego umieszczam pojedyncze UIScrollViews, które są używane wyłącznie do powiększania. Wewnątrz każdego z nich mam jeden widok, który jest elementem strony, który powinien być powiększany. Wszystko to jest wewnątrz kontrolera UINavigationController z półprzezroczystym navbarem.Granice automatycznie zmieniają się na UIScrollView z wstawkami zawartości
Moje pagesScrollView
ma contentInset.top = 64
i bounds.origin.y = -64
(wydaje mi się to dziwne, ale to właśnie system ustawia automatycznie dla mnie), a to działa dobrze. Mój ekran wygląda świetnie!
Jednak po tym, jak przewijać pagesScrollView
nawet odrobinę, tak szybko, jak scrollViewWillEndDragging
się nazywa, pagesScrollView
zaczyna animowany zmiana bounds.origin.y = -64
do bounds.origin.y = 0
co powoduje moje elementy strony mają być zasłonięte przez pasku nawigacyjnym.
Po lewej stronie jest to, jak wygląda po załadowaniu, po prawej jest to, jak wygląda po przeciągnięciu kilku pikseli, a następnie puszczeniu, przesuwa się pod navbar (ponieważ bounds.origin.y idzie do 0).
Problemem jest to, że nie mam żadnego kodu, który jest zmienianie granic i nie mam żadnego kodu w różnych metod przewijania powierzyć to wszystko. Dodałem kilka metod delegatów przewijania i właśnie dodałem NSLog(), aby móc dowiedzieć się, kiedy/gdzie nastąpiła zmiana, ale nie dzieje się to w moim kodzie.
Więc, nie wiem, jaki kod mogę ci pokazać, żeby mi pomóc.
EDYTOWANIE: Zbudowałem nowy projekt od podstaw, aby usunąć wszystkie inne zmienne. Umieszczam nagiego UIViewController w UINavigationController. Umieściłem UIScrollView w moim widoku na cały rozmiar widoku. Poniższy kod jest całym projektem.
Okazuje się, że problem (opisany poniżej) pojawia się tylko raz, gdy PAGING JEST WŁĄCZONY na UIScrollView! Wtf? :)
Oto link do pobrania podstawowego projektu z kilkoma liniami kodu, który demonstruje problem. Po prostu kliknij w przewijanie, a zobaczysz, jak się zmienia, gdy zmieniają się granice. http://inadaydevelopment.com/stackoverflow/WeirdScrollViews.zip
W jaki sposób mogę włączyć stronicowanie w moim przewijanym wierszu bez przerażających granic podczas przewijania i przesuwania wszystkiego pod paskiem nawigacji?
Możliwe jest ustawienie paska nawigacyjnego na nieprzezroczysty i problem jest omijany, ale idealnym rozwiązaniem jest zachowanie standardowego systemu iOS7, aby po powiększeniu widoku zawartości THEN treści mogły znajdować się pod paskiem nawigacji i powinny pokazywać przezroczystość normalnie.
- (void) viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
NSArray *colors = @[
[UIColor blueColor],
[UIColor orangeColor],
[UIColor magentaColor],
];
NSArray *zoomerColors = @[
[UIColor greenColor],
[UIColor yellowColor],
[UIColor purpleColor],
];
self.scroller.pagingEnabled = YES;
[self.scroller setContentSize:CGSizeMake(self.scroller.frame.size.width*colors.count, self.scroller.frame.size.height)];
CGRect subviewFrame = CGRectMake(0, 0, 160, 240);
for (int index=0; index < colors.count; index++) {
UIColor *color = [colors objectAtIndex:index];
UIColor *zoomerColor = [zoomerColors objectAtIndex:index];
UIView *subview = [[UIView alloc] initWithFrame:subviewFrame];
subview.backgroundColor = color;
CGRect zoomerFrame = CGRectMake(index*self.scroller.frame.size.width, 0, self.scroller.frame.size.width, self.scroller.frame.size.height);
UIScrollView *zoomer = [[UIScrollView alloc] initWithFrame:zoomerFrame];
[zoomer addSubview:subview];
zoomer.backgroundColor = zoomerColor;
[self.scroller addSubview:zoomer];
}
}
jeśli używasz granic x i y punkt to 0,0 musisz użyć ramki. –
włóż kod scrollViewWillEndDragging lub ** wprowadź kod poszczególnych UIScrollViews ** – iPatel
@nitinkachhadiya, w ogóle nie zmieniam granic, a granice zaczynają się od -64 ... co mi się nie podobało, ale to właśnie system ustawia się samodzielnie. –