【问题标题】:How can I programmatically change the size of a UICollectionView?如何以编程方式更改 UICollectionView 的大小?
【发布时间】:2013-08-21 12:59:39
【问题描述】:

我在界面构建器中创建了一个 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];

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

【问题讨论】:

  • 你可以试试self.contactList吗?
  • @amar 它仍然没有更新。
  • 您是否尝试过使用 spring-struts/autolayout 自动设置大小?
  • @AnuragSoni 我对我的应用程序中的几乎所有东西都使用了自动布局,但我无法让它适合我的 collectionview 的大小,因为它不应该真正“捕捉”到任何东西或成为距离边缘一定距离。
  • @AnuragSoni 我设法让自动布局来做我想做的事。我认为这足以让我继续前进,谢谢。

标签: ios objective-c uicollectionview


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    您何时修改contactList 的框架?在 VC 初始化时,出口为零。连接插座后,您的视图控制器会收到 ViewDidLoad 调用。

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

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

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

    【讨论】:

      【解决方案3】:

      我认为你尝试做 [self.yourcontrollerview reloaddata]

      当你修改框架时..

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-06
        • 2015-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多