5

我在界面生成器中创建了一个 UICollectionView。我引用了它

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

在我的 .h 文件和@synthesize 联系人列表中;在我的 .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;
    }
}

这工作得很好,但我也想改变大小(横向我每页有一个 2*3 网格,纵向它是一个 3*2 网格)。我尝试像这样设置大小:

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

但它不会更新。没有错误,但视图没有更新。它只是保持与以前相同的大小。我该怎么做才能更新视图?

4

3 回答 3

0

在我的应用程序中,我总是使用这个:

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

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

这应该设置您的框架并更新您的布局。

于 2014-06-06T07:30:21.957 回答
-1

我想你试着做 [self.yourcontrollerview reloaddata]

当你修改框架..

于 2013-08-22T09:03:17.877 回答
-1

你什么时候修改框架contactList?在 VC 初始化时,出口为零。ViewDidLoad连接插座后,您的视图控制器会接到电话。

我怀疑contactList在执行调整大小的代码时它仍然为零。将该代码的执行移到一个ViewDidLoad方法中,您将能够访问真正的交易。

您可以通过在调整框架大小的位置添加以下内容来轻松测试此理论:

NSLog(@"contactList is: %@",contactList.description);
于 2013-08-21T13:22:56.967 回答