标签: uicollectionviewlayout

动画UICollectionView的框架和布局更改

我正在尝试创建一个效果,我在更改帧大小时更改我的UICollectionView的布局

最初,collectionView布局在整个屏幕上呈现"缩略图"库样式.

在将框架尺寸调整为细条后 - 我想呈现"电影条"风格的布局

两种布局都可以独立工作,并且符合预期.

我尝试过类似的代码:

[UIView animateWithDuration:1
                          delay:0.0
                        options:UIViewAnimationOptionCurveEaseOut
                     animations:^{
                         self.collectionview.frame = newFrame; // animate the frame size


                     }
                     completion:^(BOOL finished) {
                        [self.collectionView.collectionViewLayout invalidateLayout];

    [self.collectionView setCollectionViewLayout:filmstriplayout animated:YES];    // now set the new layout
                     }];
Run Code Online (Sandbox Code Playgroud)

但它看起来非常不稳定,没有按预期调整大小.

有没有办法在动画更改的同时更改集合视图布局和帧大小?

uiviewanimation ios uicollectionview uicollectionviewlayout

16
推荐指数
2
解决办法
3万
查看次数

setCollectionViewLayout:动画导致调试错误:快照未呈现的视图会导致空快照

我在iOS7中忙于UICollectionView.

我正在两个不同的布局之间更改我的集合视图的布局.这是UICollectionViewFlowLayout的子类.

这是我点击按钮时更改视图的方式:

-(void)changeViewLayoutButtonPressed
{
    self.changeLayout = !self.changeLayout;

    if (self.changeLayout){
        [self.tableViewLayout invalidateLayout];
        [self.tradeFeedCollectionView setCollectionViewLayout:self.grideLayout animated:YES];

    }

    else {

        [self.grideLayout invalidateLayout];
        [self.tradeFeedCollectionView setCollectionViewLayout:self.tableViewLayout animated:YES];

    }
}
Run Code Online (Sandbox Code Playgroud)

此方法按预期工作,并使用漂亮的动画更改视图.但是在控制台中我收到这些消息:

快照未呈现的视图会导致空快照.确保在屏幕更新后快照或快照之前至少渲染了一次视图.

关于是什么导致这个的任何想法?

objective-c uicollectionviewlayout ios7

16
推荐指数
4
解决办法
5870
查看次数

在顶部显示节标题,UICollectionViewFlowLayout滚动设置为水平

这是这个问题的副本.我再次问,因为接受的答案不起作用,没有人提供更多关于假设正确答案是如何工作的解释.

所以情况就是这样:我想将集合视图显示在一行中.为此,我将自定义应用于UICollectionViewFlowLayout集合视图并将滚动设置为水平.一切都工作正常,除了节头消失了.

标题消失了

为了解决这个问题,我实现了这个功能:

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section 
  {
    return CGSizeMake(350, 35);
  }
Run Code Online (Sandbox Code Playgroud)

现在显示标题,但问题是它显示在单元格的左侧,而不是通常的顶部.

我在寻找解决方案时偶然发现了上面的链接,但就像我说的那样,接受的答案根本不起作用,我无法找到关于这种情况的其他解决方案.所以有人可以帮助我吗?

错误的标题位置

ios uicollectionview uicollectionviewlayout

16
推荐指数
1
解决办法
2655
查看次数

在不同的swift版本中找不到sizeForItemAtIndexPath

我正在使用UICollectionView但未找到以下方法:

 func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize
Run Code Online (Sandbox Code Playgroud)

请建议我替换它.

uicollectionview uicollectionviewlayout swift swift3 swift4

16
推荐指数
2
解决办法
1万
查看次数

UICollectionView特殊水平流 - 多个部分

我有一个UICollectionView,根据设备方向使用不同.图像描述了我拥有的和我需要的东西.

是否有可能通过默认的flowlayout获得"我需要它的水平滚动"或者我是否需要制作customflowlayout(指南赞赏)或多个collectionviews?

集合流程布局

objective-c ipad uicollectionview uicollectionviewlayout

15
推荐指数
1
解决办法
9946
查看次数

动画UICollectionView单元格大小更改并重新定位周围的单元格

在此输入图像描述

目标:

为单元格高度的变化设置动画并重新定位周围的单元格.

场景:

集合视图中的某些单元格会加载远程图像.最初,这些单元格的大小是静态的,并显示了活动指示符.加载图像后,将其添加到其单元格中,并更改单元格的高度以适合照片.

笔记:

我用它来动画细胞的框架变化animateWithDuration.这样可以正常工作,除了增加的单元尺寸使其与下面的单元重叠.collectionView.collectionViewLayout invalidateLayout在调整目标单元格大小并更新返回的大小后,我盲目地尝试调用但sizeForItemAtIndexPath没有成功.

有什么建议?谢谢!

示例代码:

https://github.com/juzzin/ResizeUICollectionViewCell/blob/master/ResizeUICollectionViewCell/FLOViewController.m

在此输入图像描述

objective-c uicollectionview uicollectionviewcell uicollectionviewlayout ios7

15
推荐指数
1
解决办法
9747
查看次数

UICollectionView中具有自定义UICollectionViewLayout的节的标题

我正在研究UICollectionView自定义布局.在两天内我无法理解如何添加标题UICollectionView.我有一个非常简单的视图控制器(在自定义布局的故事板中创建):

class ACollectionViewController: UICollectionViewController {

    enum Identifiers: String {
        case CellIdentifier = "Cell"
        case HeaderIdentifier = "Header"
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        self.collectionView.registerClass(UICollectionReusableView.self, forSupplementaryViewOfKind: UICollectionElementKindSectionHeader, withReuseIdentifier: Identifiers.HeaderIdentifier.rawValue)
    }

    // MARK: UICollectionViewDataSource
    override func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
        return 1
    }

    override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return 10
    }

    override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier(Identifiers.CellIdentifier.rawValue, forIndexPath: indexPath) as Cell
        cell.backgroundColor = UIColor.redColor() …
Run Code Online (Sandbox Code Playgroud)

ios uicollectionview uicollectionviewlayout swift

15
推荐指数
1
解决办法
1万
查看次数

在swift中使用UICollectionView粘贴头

我正在尝试创建一个粘性补充标题,它始终保持在顶部并且不会响应滚动事件.到目前为止我找到的解决方案仍然对bounch滚动做出反应,并使用自定义flowlayout进行修复,这可能也是我的问题的解决方案.

我想这样做的原因是标题在其他地方使用,应该是可重用的.我希望这可以通过这种方式解决,我不必创建一个单独的视图.

正如我在Swift中所做的那样,在Swift中有一个例子会很棒.

ios uicollectionview uicollectionviewlayout swift tvos

15
推荐指数
2
解决办法
3万
查看次数

使用“UICollectionViewCompositionalLayout”时如何检测正交滚动事件?

在视频“集合视图布局的进展 - WWDC 2019”中,Apple 引入了新的“正交滚动行为”功能。我有一个与OrthogonalScrollingViewController示例代码几乎相同的视图控制器。特别是我的集合视图是垂直布局的,每个部分都可以水平滚动(我使用section.orthogonalScrollingBehavior = .groupPaging)。

我想让我的所有部分一致水平滚动。以前,我在每个水平集合视图上监听scrollViewDidScroll,然后手动设置其他视图的内容偏移量。但是,使用新的orthogonalScrollingBehavior实现,scrollViewDidScroll当我水平滚动时,永远不会调用委托。如何使用新 API 检测水平滚动事件?

如果有另一种方法可以使各部分水平滚动在一起,我也愿意接受其他建议。

wwdc ios uicollectionview uicollectionviewlayout swift

15
推荐指数
1
解决办法
5070
查看次数

UICollectionView performBatchUpdates:动画所有部分

我正在写一个自定义UICollectionViewFlowLayout,我注意到了,当我在集合视图上调用时initialLayoutAttributesForAppearingItemAtIndexPath:,initialLayoutAttributesForAppearingDecorationElementOfKind:atIndexPath:将调用所有部分performBatchUpdates:completion:.结果是所有部分都应用了动画,而不仅仅是新添加的部分.

[collectionView performBatchUpdates:^{
    currentModelArrayIndex++;
    [collectionView insertSections:[NSIndexSet indexSetWithIndex:currentModelArrayIndex]];
    [collectionView reloadSections:[NSIndexSet indexSetWithIndex:currentModelArrayIndex-1]];
} completion:^(BOOL finished) {
    [collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:currentModelArrayIndex] atScrollPosition:UICollectionViewScrollPositionTop animated:YES];
}];
Run Code Online (Sandbox Code Playgroud)

我到目前为止所尝试的是删除调用而performBatchUpdates:completion:不是简单的更新,但是已经存在的部分(所有部分)都是动画的.我想出了一个检查的解决方案,以确保我更改了最后一节的布局属性,但它感觉很hacky.

if (decorationIndexPath.section == [(id<UICollectionViewDataSource>)self.collectionView.delegate numberOfSectionsInCollectionView:self.collectionView] - 1)
{
   layoutAttributes.alpha = 0.0f;
   layoutAttributes.transform3D = CATransform3DMakeTranslation(-CGRectGetWidth(layoutAttributes.frame), 0, 0);
}
Run Code Online (Sandbox Code Playgroud)

这是仅仅为某些部分制作动画的正确方法吗?

objective-c uikit ios6 uicollectionview uicollectionviewlayout

14
推荐指数
1
解决办法
1万
查看次数