J'ai quelques tableaux (style groupé) dans mon application iphone (uniquement sur une partie de l'écran et ajoutés avec, Interface Builder
mais non sous-classés UITableViewController
), dont 80% du temps sont petits et s'adapteront à l'écran. Lorsque le tableau tient sur l'écran, je voudrais désactiver le défilement, pour le rendre un peu plus propre. Mais si le tableau disparaît de l'écran (lorsque des lignes y sont ajoutées ultérieurement), j'aimerais réactiver le défilement (car sinon vous ne pouvez pas voir ce contenu.)
Y a-t-il un moyen de faire cela? Je n'arrive pas à comprendre. Je sais faire:
tableView.scrollEnabled = NO;
mais je ne sais pas où, ni si je dois calculer la taille de l'objet de la table ou quelque chose pour que cela fonctionne.
Mise à jour : voici la solution qui a finalement fonctionné pour moi:
if (table.contentSize.height < table.frame.size.height) {
table.scrollEnabled = NO;
}
else {
table.scrollEnabled = YES;
}
J'exécute ce code après avoir appelé reloadData
la table, il calcule les bonnes tailles et semble fonctionner.
table.frame.size.height
est la taille réelle de l'objet (vous pouvez le voir dans Interface Builder
) affiché à l'écran, tandis que table.contentSize.height
les hauteurs de: l'en-tête, le pied de page et la hauteur de chaque cellule sont additionnées.
la source
Réponses:
Je pense que tu veux régler
la source
interface builder
en décochant le rebond et rebondir horizontalement / verticalement.Vous pouvez vérifier le nombre de cellules visibles à l'aide de cette fonction:
Cette méthode retournera un tableau avec les cellules qui sont visibles, vous pouvez donc compter le nombre d'objets dans ce tableau et comparer avec le nombre d'objets dans votre table .. si c'est égal .. vous pouvez désactiver le défilement en utilisant:
Comme @Ginny l'a mentionné .. nous pourrions avoir des problèmes avec les cellules partiellement visibles, donc cette solution fonctionne mieux dans ce cas:
Si vous utilisez la mise en page automatique, cette solution fait le travail:
la source
if (table.contentSize.height < table.frame.size.height)
>> voir modifier dans le message d'origine.Dans Swift:
la source
Il y a donc plusieurs réponses et nécessite un contenu à la fois, donc j'ajoute cette réponse:
Si vous utilisez AutoLayout, en définissant cela, cela ne devrait fonctionner que pour vous:
tableView.alwaysBounceVertical = false
Il vous suffit de trouver cette option et l'option
untick
"Bounce Vertically
".Voici la référence:
Si vous n'utilisez pas AutoLayout:
la source
essaye ça
la source
Vous pouvez définir activer / désactiver le rebond ou faire défiler la vue de la table en les sélectionnant / désélectionnant dans la zone Scroll View
la source
Vous pouvez modifier cela dans votre storyboard (si vous en utilisez un). Sous la vue du tableau, il y a une case à cocher qui dit "Défilement activé". Décochez-le et vous avez terminé.
la source
// Enable scrolling based on content height self.tableView.scrollEnabled = table.contentSize.height > table.frame.size.height;
la source
La hauteur par défaut est 44,0f pour une cellule tableview je crois. Vous devez avoir votre source de données en main dans un tableau? Ensuite, vérifiez simplement si cela
[array count]*44.0f
va au-delà des limites du cadre et si c'est le castableview.scrollEnabled = NO
, définissez-le sur OUI. Faites-le là où vous déterminez la source de données pour cette vue de table particulière.la source