Je travaille dessus depuis environ 2 jours, alors j'ai pensé partager mes apprentissages avec vous.
La question est: est-il possible de réduire la largeur d'une cellule dans un UITableView groupé?
La réponse est non.
Mais il existe deux façons de contourner ce problème.
Solution n ° 1: Une table plus fine Il est possible de changer le cadre de la tableView, afin que la table soit plus petite. Cela entraînera le rendu UITableView de la cellule à l'intérieur avec la largeur réduite.
Une solution pour cela peut ressembler à ceci:
-(void)viewWillAppear:(BOOL)animated
{
CGFloat tableBorderLeft = 20;
CGFloat tableBorderRight = 20;
CGRect tableRect = self.view.frame;
tableRect.origin.x += tableBorderLeft; // make the table begin a few pixels right from its origin
tableRect.size.width -= tableBorderLeft + tableBorderRight; // reduce the width of the table
tableView.frame = tableRect;
}
Solution n ° 2: avoir des cellules rendues par des images
Cette solution est décrite ici: http://cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html
J'espère que cette information te sera utile. Il m'a fallu environ 2 jours pour essayer de nombreuses possibilités. C'est ce qui restait.
la source
Réponses:
Un moyen meilleur et plus propre d'y parvenir consiste à sous-classer UITableViewCell et à remplacer sa
-setFrame:
méthode comme suit :Pourquoi est-ce mieux? Parce que les deux autres sont pires.
Ajuster la largeur de la vue du tableau dans
-viewWillAppear:
Tout d'abord, cela n'est pas fiable, le contrôleur de vue supervisée ou de vue parent peut ajuster le cadre de vue de la table après l'
-viewWillAppear:
appel. Bien sûr, vous pouvez sous--setFrame:
classer et remplacer pour votre UITableView comme ce que je fais ici pour UITableViewCells. Cependant, sous-classer UITableViewCells est une méthode très courante, légère et Apple.Deuxièmement, si votre UITableView a backgroundView, vous ne voulez pas que son backgroundView soit réduit ensemble. Garder la largeur de backgroundView tout en réduisant la largeur de UITableView n'est pas un travail trivial, sans oublier que l'expansion des sous-vues au-delà de sa supervision n'est pas une chose très élégante à faire en premier lieu.
Rendu de cellule personnalisé pour simuler une largeur plus étroite
Pour ce faire, vous devez préparer des images d'arrière-plan spéciales avec des marges horizontales et vous devez disposer vous-même des sous-vues des cellules pour tenir compte des marges. En comparaison, si vous ajustez simplement la largeur de la cellule entière, le redimensionnement automatique fera tout le travail pour vous.
la source
Pour ce faire dans Swift, qui ne fournit pas de méthodes pour définir les variables, vous devrez remplacer le setter pour
frame
. Publié à l'origine (du moins là où je l'ai trouvé) icila source
Si rien ne fonctionne, vous pouvez essayer ceci
Faites de la couleur d'arrière-plan de la cellule une couleur claire, puis placez une image de la cellule avec la taille requise. Si vous souhaitez afficher du texte sur cette cellule, placez une étiquette au-dessus de l'image. N'oubliez pas de définir la couleur d'arrière-plan de l'étiquette également sur la couleur claire.
la source
J'ai trouvé que la solution acceptée ne fonctionnait pas lors de la rotation. Pour obtenir des cellules UITableViewCells avec des largeurs fixes et des marges flexibles, je viens d'adapter la solution ci-dessus à ce qui suit:
La méthode est appelée chaque fois que le périphérique tourne, de sorte que les cellules seront toujours centrées.
la source
Il existe une méthode qui est appelée lors de la rotation de l'écran: viewWillTransitionToSize
C'est là que vous devez redimensionner le cadre. Voir exemple. Modifiez les coordonnées du cadre selon vos besoins.
la source
je le fais dans
Et cela a fonctionné pour moi
la source
Dans le fichier .h, ajoutez le délégué 'UITableViewDataSource'
la source