TleiOS 6.0: UICollectionView nie przestrzega clipsToBounds z pagingEnabled
ja wdrożenie UICollectionView
(po raz pierwszy) w celu uzyskania paged poziomego przewijania widoku płytek. Chciałbym, aby każda płytka była wyświetlana w środku kadru z jej siostrzanymi kaflami częściowo widocznymi po lewej i prawej stronie (coś w rodzaju selektora stron w aplikacji Safari). Jestem zainteresowany użyciem UICollectionView
, aby skorzystać z wbudowanego usuwania komórek i wolałbym nie używać obróconego UITableView
.
Issue
Problem mam ze znalezieniem jest to, że podczas korzystania pagingEnabled = YES
i clipsToBounds = NO
The UICollectionView
usuwa komórki poza ramy collectionView
(nie są one w tablicy visibleCells
) tak szybko jak stronicowania jest kompletna. Czy ktokolwiek może doradzić, jak uzyskać efekt wyświetlania podglądu płytek siostrzanych przy zachowaniu tej podstawowej konfiguracji? Czy podchodzę do tego niepoprawnie?
ekranu
startowe przewijanie Koniec
przewijanie ekran jest dokładnie poprawne. Ale na początku i na końcu chcę, żeby zielony był widoczny na niebieskich marginesach.
Oto co jest w moim AppDelegate.m (kredyt do tutsplus.com dla podstawowej konfiguracji tutaj):
#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
Odkryliśmy, że działa to dopóki nie masz 6 lub więcej komórek, w którym to momencie komórki zaczynają znikać, nawet jeśli znajdują się wewnątrz ramki widoku. Dzieje się tak, gdy dana komórka * znajduje się * za * obydwoma komórkami sąsiednimi (tutaj przestaliśmy badać). –
Nie mogę wykonać tej pracy na iOS 8, w nowych rozmiarach iPhone'a i obsługując funkcję Autolayout. –