2013-08-21 32 views
5

habe ich eine UICollectionView im Interface Builder. Ich referenzierte es mitWie kann ich programmgesteuert die Größe eines UICollectionView ändern?

@property (strong, nonatomic) IBOutlet UICollectionView *contactList; 

in meiner .h-Datei und @synthesize contactList; in meiner .m-Datei.
Ich habe versucht, ein etwas anderes Layout in Hoch- und Querformat mit dem folgenden Code zu implementieren:

- (void) adjustViewsForOrientation:(UIInterfaceOrientation) orientation { 
    if (orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown) { 
     UICollectionViewFlowLayout *flow = (UICollectionViewFlowLayout*)contactList.collectionViewLayout; 
     flow.sectionInset = UIEdgeInsetsMake(48, 80, 48, 0); 
     flow.minimumLineSpacing = 80; 
    } else if (orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight) { 
     UICollectionViewFlowLayout *flow = (UICollectionViewFlowLayout*)contactList.collectionViewLayout; 
     flow.sectionInset = UIEdgeInsetsMake(48, 64, 48, 0); 
     flow.minimumLineSpacing = 64; 
    } 
} 

Das funktioniert prefectly, aber ich mag auch die Größe ändern (in der Landschaft habe ich ein 2 * 3 Gitter pro Seite und im Hochformat ist es ein 3 * 2 Raster). Ich habe versucht, die Größe wie folgt einzustellen:

CGRect frame = [contactList frame]; 
frame.size.width = 960; 
[contactList setFrame:frame]; 

Aber es wird nicht aktualisiert. Es gibt keinen Fehler, aber die Ansicht wird nicht aktualisiert. Es bleibt nur in der gleichen Größe wie zuvor. Was muss ich tun, um die Ansicht zu aktualisieren?

+0

Können Sie versuchen, 'self.contactList' zu verwenden? – Amar

+0

@amar Es wird immer noch nicht aktualisiert. – Kevin

+0

Haben Sie versucht, die Größe automatisch mit Federstreben/Autolayout einzustellen? –

Antwort

-1

Wenn modifizieren Sie den Rahmen des contactList? Zur VC-Initialisierungszeit sind die Ausgänge gleich Null. Ihr View-Controller ruft einen ViewDidLoad Anruf auf, nachdem die Ausgänge verbunden sind.

Ich vermute, dass contactList noch null ist, wenn Ihr Ändern der Größe Code ausgeführt wird. Verschieben Sie die Ausführung dieses Codes in eine ViewDidLoad-Methode, und Sie können auf das echte Angebot zugreifen.

Sie können ganz einfach diese Theorie testen, indem Sie das folgende, wo Sie den Rahmen skalieren:

NSLog(@"contactList is: %@",contactList.description); 
-1

Ich glaube, Sie versuchen [self.yourcontrollerview reloaddata]

zu tun, wenn Sie den Rahmen ändern ..

0

In meiner app immer ich mit dieser:

[self.contactList performUpdates:^{ 
    CGRect frame = [contactList frame]; 
    frame.size.width = 960; 
    [contactList setFrame:frame]; 

    [self.contactList.collectionViewLayout invalidateLayout]; 
} completion:nil]; 

Dies sollte Ihren Rahmen einstellen und Ihr Layout aktualisieren.

Verwandte Themen