2013-08-02 17 views
12

Ustawiłem UIScrollView, w którym chcę wyświetlić 12 obrazów (tylko 8 pasuje na ekranie) ułożonych poziomo. W poniższym obrazku widać problem mam (co sprawia, że ​​mój pogląd przewijania nie przewijania), moje ograniczenia i UIScrollView które dodałem na Storyboard:iOS: Autolayout powodujący brak przewijania UIScrollView

Screenshot of storyboard showing constraints

nazwałem następujący sposób na -(void)viewDidLoad, gdzie "utworzenia" my Scrollview (ITEMLIST moim zdaniem zwój własność i itemNames tablicę z images'names):

- (void)setupHorizontalScrollView 
{ 
    self.itemList.delegate = self; 
    [self.itemList setTranslatesAutoresizingMaskIntoConstraints:NO]; 

    [self.itemList setBackgroundColor:[UIColor blackColor]]; 
    [self.itemList setCanCancelContentTouches:NO]; 

    self.itemList.indicatorStyle = UIScrollViewIndicatorStyleWhite; 
    self.itemList.clipsToBounds = NO; 
    self.itemList.scrollEnabled = YES; 
    self.itemList.pagingEnabled = NO; 

    NSInteger tot=0; 
    CGFloat cx = 0; 
    for (; ; tot++) { 
     if (tot==12) { 
      break; 
     } 

     UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[self.itemNames objectAtIndex:tot]]]; 

     CGRect rect = imageView.frame; 
     rect.size.height = 40; 
     rect.size.width = 40; 
     rect.origin.x = cx; 
     rect.origin.y = 0; 

     imageView.frame = rect; 
     [self.itemList addSubview:imageView]; 
     cx += imageView.frame.size.width; 
    } 

    [self.itemList setContentSize:CGSizeMake(cx, [self.itemList bounds].size.height)]; 
} 

i dodaniu [setTranslatesAutoresizingMaskIntoConstraints self.itemList NO]; ponieważ widziałem tę sugestię w innych postach, ale nie działa z lub bez niej. Jedyny sposób, w jaki to działa, to jeśli odznaczam użycie AutoLayout w scenorysie, ale to przesuwa UIImageView Używam wyglądać jak pasek nawigacji na dole ekranu. Nie wiem już co robić, każda pomoc jest mile widziana :)

Odpowiedz

9

dwa rozwiązania:

  1. Tworzenie różnych ograniczeń, które mogą być spełnione jednocześnie (trzeba będzie zmieniać). Myślę, że problemem jest Twoja dolna przestrzeń, a ograniczenia przestrzeni kosmicznej wzajemnie się wykluczają. usuń jeden i spróbuj ponownie. Jeśli jest to dla Ciebie trudne, spróbuj dodać kolejne UIView, aby zawierało UIScrollView, aby pomóc w zarządzaniu ograniczeniami, na początku może wydawać się dziwne, ale czasami dodawanie innego widoku w celu zawężenia widoku sprawia, że ​​jest on prostszy na każdym poziomie.

  2. Wyłącz Autolayout i zmień maski autoreize Twojego UIImageView, aby być tym, czego chcesz.

+0

Próbowałem usunąć jeden z nich, ale nie wiem jak to zrobić. Mógłbyś mi powiedzieć? – dietbacon

+1

Kliknij małą ikonę koła zębatego na wiązaniu i usuń ją, jeśli pozwala, lub zmień ją tak, aby była mniej szczegółowa (na przykład zmienna lub automatyczna - więc nie ma to znaczenia). –

+1

po tym etapie, autolayout będzie coraz ważniejszy dla programowania interfejsu iOS/Mac i programowania interfejsu użytkownika. Osadzanie w widoku naprawdę pomogło mi zrobić przewijany widok pracy, jednocześnie wykorzystując wszystkie zalety autolayout. –

3

Wkładka: [scrollView setContentSize:CGSizeMake(x,y)]; w następujący sposób:

-(void)viewWillAppear:(BOOL)animated 
31

spróbować ustawić rozmiar int zawartość Twojego Scrollview za "viewDidLayoutSubviews" metody z zachowaniem autolayouts set.

-(void)viewDidLayoutSubviews 
{ 
    [self.itemList setContentSize:CGSizeMake(required_width, required_height)]; 
} 
+0

Dobrze, że to się udało. Proszę wyjaśnić, dlaczego musimy dodać tę metodę. –

+0

Awesome Bro ... Nice one thank ... To działało dla mnie również ... –

+0

dziękuję to działało również dla mnie, ale jaka jest różnica +1 – ashokdy