2010-04-23 3 views
3

En faisant un peu de dev de l'iPhone, l'application fonctionne très bien. Cependant, j'ai un UIScrollView avec un contenu autoresizing et contentSize qui fonctionne assez bien, sauf quand je tourne en mode paysage, il a toujours 100 pixels de plus sur la hauteur de défilement. Je ne veux pas que les utilisateurs puissent défiler si loin du contenu.iPhone UIScrollView ContentSize a une hauteur supplémentaire lors de la rotation/conversion en paysage

Quelqu'un d'autre a-t-il eu ce problème ou a-t-il eu connaissance d'un correctif?

merci à l'avance,

Michael

+0

La propriété est-contentInset mis à zéro? –

+0

Oui inset est à 0 - Je vais passer par là et assurez-vous que la fonction que j'ai calculer la hauteur est correcte - c'est la seule chose que je peux penser à: P –

Répondre

4

j'ai vécu le même problème. Dans mon cas, je parcourais un UIScrollView en essayant de calculer dynamiquement son contentSize. En passant en revue les sous-vues, j'ai trouvé deux imagesImages mystérieuses parmi les sous-vues (que je n'ai pas ajoutées), qui totalisaient exactement 100 pixels. Il s'avère que ces deux images sont en fait l'indicateur de défilement qui est automatiquement ajouté à la scrollview.

Ma solution était de créer une classe de conteneur, appelons-la ContainerView, et j'ai créé la scrollview.

A l'intérieur de cette ContainerView je redéfinir les méthodes addSubview et willRemoveSubview, comme ceci:

- (void)addSubview:(UIView *)view { 
    [_addedSubviews addObject:view]; 
    [_scrollView addSubview:view]; 
} 

- (void)willRemoveSubview:(UIView *)subview { 
    [_addedSubviews removeObject:subview]; 
    [_scrollView willRemoveSubview:subview]; 
} 

Maintenant, vous pouvez ajouter une méthode de calcul de la taille. Cette fois, nous allons parcourir le tableau appelé _addedSubviews, au lieu des sous-vues scrollviews, car nous savons que les vues à l'intérieur de _addedSubviews sont uniquement celles ajoutées par nous. Et à cause de cela, nous allons éviter de faire défiler les indicateurs de défilement et autres joyeusetés :-)

Enfin, faites simplement une boucle et calculez.

- (CGSize)desiredContentSize { 
    for(UIView *mySubviews in _addedSubviews) { 
     // Calculate size 
    } 
    // Return size 
} 
+0

Une autre façon est d'utiliser des classes personnalisées et test pour voir si ils sont le type que vous voulez (isKindOfClass), mais votre méthode est probablement beaucoup plus rapide à proc –

0

Zath a une solution intéressante. J'ai couru dans le même genre.

Je voudrais dire que vous ne mettez pas à jour votre contentSize après le passage au paysage, mais le contentSize devrait être le même malgré tout.

Ironiquement, j'avais le problème inverse tout à l'heure. Cependant, après l'apprentissage de superviews doit avoir autoresizesSubviews mis à oui, et en s'assurant que les 4 superviews ont la même propriété de redimensionnement, il conserve finalement l'espace "tampon".

Beaucoup de courir après coup sec et finalement vous obtiendrez ce que vous voulez, sauf si vous voulez que le haut point y rester au même endroit quand il est supérieur à 0.

Questions connexes