2013-08-21 44 views
5

Tôi đã tạo UICollectionView trong trình tạo giao diện. Tôi đã tham chiếu nó vớiLàm cách nào để thay đổi kích thước của UICollectionView?

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

trong tệp .h và @synthesize contactList của tôi; trong tệp .m của tôi.
tôi cố gắng thực hiện một cách bố trí hơi khác nhau trong bức chân dung và phong cảnh sử dụng đoạn mã sau:

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

này hoạt động prefectly, nhưng tôi cũng muốn thay đổi kích thước (trong cảnh quan tôi có một lưới 2 * 3 mỗi trang và theo chiều dọc, đó là lưới 3 * 2). Tôi đã thử đặt kích thước như sau:

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

Nhưng nó sẽ không cập nhật. Không có lỗi, nhưng chế độ xem không được cập nhật. Nó chỉ ở cùng kích thước như trước. Tôi phải làm gì để cập nhật chế độ xem?

+0

Bạn có thể thử sử dụng 'self.contactList' không? – Amar

+0

@amar Nó vẫn không cập nhật. – Kevin

+0

bạn đã thử tự động đặt kích thước bằng spring-struts/autolayout chưa? –

Trả lời

-1

Khi nào bạn sửa đổi khung của contactList? Tại thời điểm khởi tạo VC, các cửa hàng là không. Bộ điều khiển chế độ xem của bạn nhận được cuộc gọi ViewDidLoad sau khi các cửa hàng được kết nối.

Tôi nghi ngờ rằng contactList vẫn là không khi mã thay đổi kích thước của bạn đang được thực thi. Di chuyển thực thi mã đó vào phương thức ViewDidLoad và bạn sẽ có thể truy cập vào giao dịch thực.

Bạn có thể dễ dàng kiểm tra lý thuyết này bằng cách thêm dòng sau vào nơi bạn thay đổi kích thước khung hình:

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

tôi nghĩ rằng bạn cố gắng làm [self.yourcontrollerview reloaddata]

khi bạn sửa đổi khung ..

0

Trong ứng dụng của tôi, tôi luôn sử dụng tính năng này:

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

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

Điều này sẽ đặt khung của bạn và cập nhật bố cục của bạn.

Các vấn đề liên quan