Comment ajouter un séparateur personnalisé de UITableViewCell?
S'il vous plaît pardonnez quelque temps comme c'est une longue explication
J'ai un UIViewController
qui se compose d'une UIButton
et un UITableView
qui charge différents types de UITableViewCell
s avec Identifiant Cell1
et Cell2
, sur événement touchUpInside
du bouton. Je m à l'aide de storyboard.
Le séparateur pour les deux cellules sont personnalisés.
Cell1
a un séparateur qui occupe toute la largeur de la cellule et de 1 pixel de hauteur au fond de la cellule.
Alors que Cell2
a un séparateur, qui a décalage de 5 pixels de la cellule de gauche et de droite.
Chaque fois que le bouton à l'extérieur de la tableView
est cliqué sur le tableViewCell
s sont échangés, basé sur la cellule d'identification.
D'abord le tableView
occupe toute la largeur de viewController
et se compose de Cell1, mais le bouton est actionné , tableViewCell
s sont modifiées pour Cellule2 et le cadre de l' tableView
est Changé, La largeur est réduite de 10 et x-origine est augmenté de 5.
Mais lorsque cela se produit, le séparateur de Cell2
est de 5 pixels de distance de la cellule sur la droite mais à gauche, il s'est éloigné de 5 pixels.
Cela se produit pour tous Cell2
qui est chargé avec des données, et les cellules qui n'a pas de données, le cadre est modifié en conséquence.
Mais la cellule après qui a la largeur de Cell1
(grande largeur)
-(void)setSeperatorStyleForTableView :(UITableViewCell *)cell //this is called in cellForRowAtIndex
{
//cell- type of cell(Cell1 or Cell2)
CGRect seperatorFrame;
UIImageView *seperatorImage;
seperatorFrame = [self setSeperatorFrame:cell];
if(firstCellToBeLoaded)//BOOL used to change the button text and load appropriate cells
{
seperatorImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"table_row
2.png"]];
}
else
{
seperatorImage = [[UIImageView alloc] initWithImage:[UIImage
imageNamed:@"table_row.png"]];
}
seperatorImage.frame = seperatorFrame;
seperatorImage.autoresizingMask = YES;
[cell.contentView addSubview:seperatorImage];
}
//set the customized separator frame
-(CGRect)setSeperatorFrame :(UITableViewCell *)cell
{
CGRect seperatorFrame;
seperatorFrame.size.height = 1.0;
seperatorFrame.origin.y = cell.frame.origin.y + (cell.frame.size.height - 1.0);
if(firstCellToBeLoaded)
{
seperatorFrame.origin.x = cell.frame.origin.x ;
seperatorFrame.size.width = cell.frame.size.width;
}
else
{
seperatorFrame.origin.x = cell.frame.origin.x + 5.0;
seperatorFrame.size.width = cell.frame.size.width -10.0;
}
return seperatorFrame;
}
OriginalL'auteur user1899840 | 2013-02-08
Vous devez vous connecter pour publier un commentaire.
Vous pouvez ajouter
tableView
'ligne de séparation, et d'ajouter votre ligne personnalisés en haut de chaque cellule.En suivant un Changement de code hauteur/largeur/couleur/image de
UIView
pour définir votre separatorLine.La façon la plus simple pour ajouter un séparateur personnalisé est d'ajouter de la simple
UIView
de 1px de hauteur:Ce code pourrait résoudre votre problème 🙂
backgroundColor
dans tous les sous-vues est remis à la transparence. Au lieu debackgroundColor
, il est préférable de créer un simpleUIView
sous-classe qui va se remplir avec la couleur indiquée dansdrawRect:
. Aussi, le séparateur peut pas aller dans lacontentView
(en raison de bouton supprimer, accessoire points de vue, etc.). Il faut aller directement à la cellule.Vous pouvez également mettre l'image au lieu de la couleur, j'ai aussi mentionné dans ma réponse à un commentaire 🙂 Merci 🙂
La dernière cellule de ne pas ajouter une ligne à cette
Si vous souhaitez couvrir la dernière cellule de la ligne de séparateur besoin de changer l'axe Y de separatorLineView 0 à la cellule.hauteur-1
OriginalL'auteur
Bonne façon de le faire serait d'avoir le séparateur dans la cellule de la classe, sous-classe UITableViewCell si vous n'avez pas ajouter un séparateur d'image variable et sur chaque cellule de la création, vous pouvez simplement changer l'image et le cadre plutôt que d'ajouter sur chaque dessin. Si vous avez besoin d'un code pour ce que je peux fournir. Actuellement, lorsque la cellule est redessiné, il a déjà l'image u ajouté pour la dernière fois et que vous venez en ajoutant que, encore une fois, soit vous supprimez-en -prepareForReuse méthode ou tout simplement faire comme je l'ai expliqué ci-dessus.
À l'aide de la cellule de la vue-contrôleur.
OriginalL'auteur
Je faire de cette façon... espérons que cela pourrait les aider.
Maintenant, vous pouvez faire des choses comme
cellSeparatorStyle
le nomseparatorStyle
est utilisé pour la propriété, la cellule va tirer ses propres bizarre séparateurs de n'importe quoi. Il est essentiel de ne pas créer une propriété sur votreUITableViewCell
descendant.OriginalL'auteur
Comme les autres ont dit, habituellement, il y a deux façons de le faire, soit créer un
CALayer
ou unUIView
séparateur de 1px et l'ajouter àcontentView
.Au fil du temps j'ai vu plusieurs projets de ce faire différemment, et parfois même de plusieurs manières dans le même projet. Il est également facile d'introduire des bugs, car de la cellule de réutilisation et aussi, pour un rendu correct de lignes de pixels, on doit incorporer l'échelle de l'écran:
(1.0 /[UIScreen mainScreen].scale)
.J'ai créé un bibliothèque qui simplifie ce pour une seule classe de méthode, pas de sous-classement requis.
https://github.com/kgaidis/KGViewSeparators
Objective-C:
[view kg_show:YES separator:KGViewSeparatorTop color:[UIColor blackColor] lineWidth:KGViewSeparatorLineWidth(1.0) insets:UIEdgeInsetsMake(0, 15.0, 0, 15.0)];
Swift:
view.kg_show(true, separator: .Bottom, color: UIColor.blackColor(), lineWidth: KGViewSeparatorLineWidth(1.0), insets: UIEdgeInsetsZero)
OriginalL'auteur