J'ai un simple uicollectionview que j'ai défini avec 0 espacement dans InterfaceBuilder, mais lorsque je peuplé la vue de la collection avec des cellules, il y a encore un peu d'espacement. Y a-t-il quelque chose de spécial et pas immédiatement évident que je dois faire pour voir réellement une cellule de collectionView avec 0 espacement au-delà de la définition pour avoir 0 espacement? Merci.
Modifier * Quelqu'un code:
- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath {
UICollectionViewCell *cell = [cv dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];
cell.backgroundColor = [UIColor clearColor];
UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(2, 2, cell.frame.size.width -4, cell.frame.size.height -4)];
lbl.backgroundColor = [UIColor clearColor];
lbl.font = [UIFont boldSystemFontOfSize:20];
lbl.text = [NSString stringWithFormat:@"$%0.0f", [[amountsArray objectAtIndex:indexPath.row] floatValue]];
lbl.textAlignment = NSTextAlignmentCenter;
lbl.layer.borderWidth = 1;
[cell addSubview:lbl];
[lbl release];
return cell;
}
J'ai résolu ce problème et j'ai eu la mise en page que je souhaite avec ce qui suit:
- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath {
UICollectionViewCell *cell = [cv dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];
cell.backgroundColor = [UIColor clearColor];
//clear any contents on the cell
for (UIView *subView in [cell subviews]) {
[subView removeFromSuperview];
}
//Label to put on the cell
UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(2, 2, cell.frame.size.width -4, cell.frame.size.height -4)];
lbl.backgroundColor = [UIColor clearColor];
lbl.textColor = [UIColor colorWithRed:[CPExtras RGBtoPercent:70] green:[CPExtras RGBtoPercent:92] blue:[CPExtras RGBtoPercent:105] alpha:1];
lbl.font = [UIFont boldSystemFontOfSize:20];
lbl.text = @"100";
lbl.textAlignment = NSTextAlignmentCenter;
//Give the cell a border
cell.layer.borderColor = [[UIColor colorWithRed:[CPExtras RGBtoPercent:70] green:[CPExtras RGBtoPercent:92] blue:[CPExtras RGBtoPercent:105] alpha:0.5] CGColor];
cell.layer.borderWidth = 0.5;
[cell addSubview:lbl];
[lbl release];
return cell;
}
Dans IB, j'ai eu ces paramètres de mesure pour la collectionView:
Solution simple pour votre requête. Ajoutez ceci dans votre fichier .m de ViewController:
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
ProductDetailViewController *HomeVC = [self.storyboard instantiateViewControllerWithIdentifier:@"ProductDetailView"];
HomeVC.title = @"DemoProject";
[self.navigationController pushViewController:HomeVC animated:YES];
}
- (UIEdgeInsets)collectionView:(UICollectionView*)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {
return UIEdgeInsetsMake(0, 0, 0, 0); // top, left, bottom, right
}
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section {
return 0.0;
}
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section {
return 0.0;
}
SWIFT 3 Version de @ Mihiroza Solution
Travaillé pour des vues de collecte horizontale et verticale
// removing spacing
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
return UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
return 0.0
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return 0.0
}
Vous devez créer personnalisé UICollectionViewLayout
.
L'espace entre les cellules sera égal à cellSpacing
.
import UIKit
class CustomViewFlowLayout : UICollectionViewFlowLayout {
let cellSpacing:CGFloat = 0
override func layoutAttributesForElementsInRect(rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
if let attributes = super.layoutAttributesForElementsInRect(rect) {
for (index, attribute) in attributes.enumerate() {
if index == 0 { continue }
let prevLayoutAttributes = attributes[index - 1]
let Origin = CGRectGetMaxX(prevLayoutAttributes.frame)
if(Origin + cellSpacing + attribute.frame.size.width < self.collectionViewContentSize().width) {
attribute.frame.Origin.x = Origin + cellSpacing
}
}
return attributes
}
return nil
}
}
Afin de disposer d'un espace zéro, le nombre de cellules et leur largeur doit être divisible par la largeur de la vue de la collection, par exemple si vous avez 5 cellules à la fois avec une largeur de 100px, la vue de votre collection devrait alors avoir 500px de largeur , si c'est plus grand, il forcera un espace entre les cellules.
Le documentation pour [UICollectionViewFlowLayout minimumInteritemSpacing]
mention:
Cet espacement est utilisé pour calculer le nombre d'éléments pouvant correspondre à une seule ligne, mais après la détermination du nombre d'éléments, l'espacement réel peut éventuellement être ajusté à la hausse.
Vous devrez peut-être mettre en œuvre une disposition personnalisée pour le faire. La documentation peut être trouvée ici et un exemple ici .