gpt4 book ai didi

objective-c - iOS 6.0 : UICollectionView doesn't respect clipsToBounds with pagingEnabled

转载 作者:太空狗 更新时间:2023-10-30 03:36:27 26 4
gpt4 key购买 nike

背景

我正在实现 UICollectionView(这是第一次),以实现分页的图 block 水平 ScrollView 。我希望每个图 block 都显示在框架的中央,并且它的姐妹图 block 在左侧和右侧部分可见(类似于 Safari 应用程序中的页面选择器)。我对使用 UICollectionView 来利用内置的单元格出列很感兴趣,而不想使用旋转的 UITableView

问题

我发现的问题是,当使用 pagingEnabled = YESclipsToBounds = NO 时,UICollectionView 会删除 之外的单元格>collectionView 框架(它们不在 visibleCells 数组中)一旦分页完成。任何人都可以提供有关如何在保持此基本设置的同时实现显示姐妹图 block 预览的效果的建议吗?还是我处理方法不正确?

截图

开始 start滚动 scrolling结束 end

滚动 屏幕完全正确。但在开始和结束的镜头中,我希望在蓝色边缘可以看到绿色。

这是我的 AppDelegate.m 中的内容(这里的基本设置归功于 tutsplus.com):

#import "AppDelegate.h"

@interface ViewController : UICollectionViewController
@end

@implementation ViewController

- (void)viewDidLoad
{
[super viewDidLoad];
[self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"ID"];
[self.view setBackgroundColor:[UIColor blueColor]];
// pad the collection view by 20 px
UIEdgeInsets padding = UIEdgeInsetsMake(20.0, 20.0, 20.0, 20.0);
[self.collectionView setFrame:UIEdgeInsetsInsetRect(self.view.frame, padding)];
// set pagingEnabled and clipsToBounds off
[self.collectionView setPagingEnabled:YES];
[self.collectionView setClipsToBounds:NO];
}

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return 5;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"ID" forIndexPath:indexPath];
UILabel *label = [[UILabel alloc] initWithFrame:cell.bounds];
label.textAlignment = NSTextAlignmentCenter;
label.text = [NSString stringWithFormat:@"%d", indexPath.row];
[label setBackgroundColor:[UIColor greenColor]];
[cell.contentView addSubview:label];
return cell;
}
@end

@implementation AppDelegate
{
ViewController *vc;
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// setup the UICollectionViewFlowLayout
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
layout.itemSize = CGSizeMake(280, 280);
layout.minimumInteritemSpacing = 0;
layout.minimumLineSpacing = 0;
layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
// add a custom UICollectionViewController to the window
vc = [[ViewController alloc] initWithCollectionViewLayout:layout];
self.window.rootViewController = vc;
self.window.backgroundColor = [UIColor yellowColor];
[self.window makeKeyAndVisible];
return YES;
}
@end

最佳答案

事实证明,解决这个问题其实很简单。我只需要将 UICollectionViewCell 单元重叠足够的像素,以便在分页滚动完成后它们仍然显示在 collectionView 的框架内。相关代码是

layout.itemSize = CGSizeMake(300, 300);
layout.minimumLineSpacing = -20.0;

我将 UICollectionViewFlowLayout 子类化并覆盖 (CGSize)collectionViewContentSize 方法以返回单元格的非重叠大小。

关于objective-c - iOS 6.0 : UICollectionView doesn't respect clipsToBounds with pagingEnabled,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14485014/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com