Horizontal UIScrollView à l'intérieur de UITableViewCell – en utilisant IB Storyboard – Pas de défilement

L'objective principal est de pouvoir faire défiler horizontalement le contenu de chaque ligne.

J'essaye de faire ceci avec X Code 5 et en utilisant StoryBoard.

Le problème semble simple, mais après de nombreuses heures de search, je n'ai rien eu à part un problème qui est assez similaire mais en utilisant une approche uniquement programmatique voir ici .

Dans IB, j'ai la structure comme indiqué dans la design ci-dessous. Voir la structure

  • La taille du contenu de la scrollview dans {5000, 500} est définie dans IB et dans le code
  • Le cadre de défilement est {0,0} {320,44}
  • Le cadre des labels est défini sur {20,0} {500,44}

J'ai également fourni un exemple de projet dans un repository github . L'exemple inclut également un scrollview "normal" fonctionnant en dehors d'une uitableviewcell.

S'il vous plaît dites que j'ai négligé quelque chose de très basique.

Autolayout est activé (et c'est une bonne chose) dans votre storyboard. La taille défilante d'un UIScrollView est calculée en fonction des contraintes de ses sous-vues.

Vous devez donc append "top, bottom, leading, trailing space to superview" sur UIImageView à l'intérieur de UIScrollView. Ils peuvent tous être définis sur 0.

Maintenant, si vous n'ajoutez aucune contrainte à UIImageView, sa taille insortingnsicContentSize sera utilisée.

Vos contraintes devraient ressembler à ceci:

contraintes autolayout

Notez qu'il vous manquait également des contraintes sur la vue de contenu de votre cellule.

Lorsque vous avez terminé avec les contraintes, supprimez tous les appels setContentSize: de votre code.

Une autre alternative pour cela est d'utiliser UICollectionView dans un UITableViewCell personnalisé

J'ai eu le même problème, et j'ai trouvé que supprimer la vue du contenu de scrollview et l'append à nouveau fonctionne:

- (void)viewDidLoad { [super viewDidLoad]; [self.label removeFromSuperview]; [self.scrollView addSubview:self.label]; self.scrollView.contentSize = self.label.frame.size; } 

Ce n'est pas la solution la plus élégante, mais ça marche pour moi.

Avec son nouveau mode autolayout, iOS 7 semble avoir brisé beaucoup d'applications iOS 6 et antérieures qui utilisent UIScrollView. J'ai récemment posté une question similaire [maintenant mise en attente par les modérateurs – donc vous ne pourrez peut-être pas la voir] où l'user Lv.BeLeCk a trouvé le succès en utilisant:

 self.automaticallyAdjustsScrollViewInsets = NO; 

dans le controller de vue tenant le scrollview. Mettez-le juste après l'instanciation de la vue déroulante. Voir si cela fonctionne, et si c'est le cas, s'il vous plaît upvote sa consortingbution.

Je pense que la cause première est que lors de l'instanciation, UIScrollViews met maintenant à jour leurs tailles en fonction de leur contenu actuel, par opposition à avant où ils les ont laissés l'enfer seul.

Pourquoi Apple voulait-il muck avec ça, je ne sais pas. J'attends toujours l'alignment du haut et du bas pour les labels multilignes!

Vérifiez que setContentSize est appelé dans viewDidLayoutSubviews et dans scrollViewDidEndZooming:withView:atScale: Dans iOS6, si vous n'aviez pas le code dans ces methods, le comportement par défaut a bien fonctionné, dans iOS7 avec le nouveau système de layout, ils sont obligatoires . Il peut être appelé plus d'une fois pour une installation, continuez à appeler setContentSize .

Je ne peux pas accéder à votre Storyboard , avec mon xCode 4.

Tout d'abord, vous devez connecter UITableView avec votre ViewController . UITableViewCell est dans votre UITableView . C'est pourquoi vous devriez essayer de changer les parameters de votre UITableView . Après la connection, vous devriez essayer de changer le UITableView de votre UITableView comme ceci:

 [self.tableView setContentInset:UIEdgeInsetsMake(0, 0, 2500, 2500)]; 

Si cela ne fonctionne pas, vous pouvez également essayer de modifier la taille du contenu de votre TableView. Peut-être que vous devez également changer la taille de votre UIView avant que cela fonctionne.

Je corrige la situation via IB.

Je dois avoir la même valeur dans la section "Identity Value section – User Defined Runtime Atsortingbutes" avec la key "frame – Rect – CGRectValue" égale à "Size inspector – View values".

J'espère que cela t'aidera.

J'ai le même problème aujourd'hui. Après quelques heures de search, il est résolu en changeant la sélection de la cellule à Default par None. J'espère que cela aidera les autres.