2013-08-21 2 views
5

인터페이스 작성기에 UICollectionView를 만들었습니다. 나는 그것을 .h 파일로, @synthesize contactList로UICollectionView의 크기를 프로그래밍 방식으로 변경하려면 어떻게해야합니까?

으로 참조했다. 내 .m 파일에.
나는 다음과 같은 코드를 사용하여 세로 및 가로에서 약간 다른 레이아웃을 구현하기 위해 노력 :

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

이 prefectly 작동을하지만, 나는 또한 풍경에 나는 페이지 당 2 * 3 그리드를 가지고 (크기를 변경하려면 세로로 보면 3 * 2 격자입니다. 다음과 같이 크기를 설정해 보았습니다.

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

그러나 업데이트되지 않습니다. 오류는 없지만 뷰는 업데이트되지 않습니다. 이전과 같은 크기로 유지됩니다. 보기를 업데이트하려면 어떻게해야합니까?

+0

'self.contactList'를 사용해 볼 수 있습니까? – Amar

+0

@amar 여전히 업데이트되지 않습니다. – Kevin

+0

spring-struts/autolayout을 사용하여 자동으로 크기 설정을 시도해 보셨습니까? –

답변

-1

contactList의 프레임을 언제 수정합니까? VC 초기화시 콘센트는 nil입니다. 콘센트가 연결되면보기 컨트롤러가 ViewDidLoad 전화를받습니다.

크기 조정 코드가 실행될 때 contactList이 여전히 0으로 추정됩니다. 코드 실행을 ViewDidLoad 메소드로 이동하면 실제 거래에 액세스 할 수 있습니다.

당신이 프레임의 크기를 조정 어디 쉽게에 다음을 추가하여이 이론을 테스트 할 수 있습니다

:

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

난 당신이 프레임을 수정할 때 [self.yourcontrollerview reloaddata]

을하려고 생각을 ..

0

내 앱에서는 항상 다음을 사용합니다.

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

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

프레임을 설정하고 레이아웃을 업데이트해야합니다.

관련 문제