Comment définir des sous-vues avec mise en page automatique dans UIScrollView par programmation?

Je suis entrain de créer une application avec des UiScrollview et UIPagectontrol à l'aide de mise en page automatique Progrmatically, pour

J'ai Créé TKScroller en tant que sous-classe de UIView, je suis initialisation à l'aide de Certaines de Mode et de Tableau.

TKScroller.m

-(void)setData{
[self layoutIfNeeded];
CGRect mainFrame=self.frame;
[self layoutIfNeeded];
CGRect mainFrame=self.frame;
UIView *lastview;
NSMutableArray* manualConstraints = [NSMutableArray array];
for (int i=0; i<arrayData.count ; i++)
{
CGRect frame;
frame.origin.x = scrollView.frame.size.width * i;
frame.origin.y = 0;
frame.size = scrollView.frame.size;
UIView *subview = [UIView new];
subview.backgroundColor = [self getRandomColor];
[scrollView addSubview:subview];
if (i==0)
{
NSLayoutConstraint* b1_top = [NSLayoutConstraint constraintWithItem:subview attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:scrollView attribute:NSLayoutAttributeTop multiplier:1 constant:5];
[manualConstraints addObject:b1_top];
NSLayoutConstraint* b1_left = [NSLayoutConstraint constraintWithItem:subview attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:scrollView attribute:NSLayoutAttributeLeading multiplier:1 constant:5];
[manualConstraints addObject:b1_left];
NSLayoutConstraint* b1_right = [NSLayoutConstraint constraintWithItem:subview attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:scrollView attribute:NSLayoutAttributeTrailing multiplier:1 constant:-5];
[manualConstraints addObject:b1_right];
NSLayoutConstraint* b1_bottom = [NSLayoutConstraint constraintWithItem:subview attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:scrollView attribute:NSLayoutAttributeTop multiplier:1 constant:-10];
[manualConstraints addObject:b1_bottom];
[subview layoutIfNeeded];
[scrollView addConstraints:manualConstraints];
lastview=subview;
}
else{
NSLayoutConstraint* b1_top = [NSLayoutConstraint constraintWithItem:subview attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:scrollView attribute:NSLayoutAttributeTop multiplier:1 constant:5];
[manualConstraints addObject:b1_top];
NSLayoutConstraint* b1_left = [NSLayoutConstraint constraintWithItem:subview attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:lastview attribute:NSLayoutAttributeLeading multiplier:1 constant:5];
[manualConstraints addObject:b1_left];
NSLayoutConstraint* b1_right = [NSLayoutConstraint constraintWithItem:subview attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:scrollView attribute:NSLayoutAttributeTrailing multiplier:1 constant:-5];
[manualConstraints addObject:b1_right];
NSLayoutConstraint* b1_bottom = [NSLayoutConstraint constraintWithItem:subview attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:scrollView attribute:NSLayoutAttributeTop multiplier:1 constant:-10];
[manualConstraints addObject:b1_bottom];
[subview layoutIfNeeded];
[scrollView addConstraints:manualConstraints];
lastview=subview;
}
}
scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * arrayData.count, mainFrame.size.height/2);
self.pageControl.currentPage = 0;
self.pageControl.numberOfPages = arrayData.count;
pageControlBeingUsed = NO;
}
-(UIColor *)getRandomColor{
int r = arc4random() % 255;
int g = arc4random() % 255;
int b = arc4random() % 255;
return [UIColor colorWithRed:(r/255.0) green:(g/255.0) blue:(b/255.0) alpha:1.0];
}

Droit maintenant, je me fais tout les sous-vues,

mais si je change d'orientation qu'il donnera un résultat incorrect, Alors comment puis-je donner NSLayoutConstraint pour les sous-vues de la scrollview ?

MODIFIER

Après l'ajout de NSLayoutConstraint des sous-vues ne sont pas affichés. Je suis juste en manque certaines contraintes , s'il vous plaît corrigez-moi dans la définition de contraintes de manière dynamique.

Mon Le Code Source est ici , S'Il Vous Plaît Aider Moi.
Je vous remercie. Et Désolé pour la mauvaise grammaire.

Qu'entendez-vous par "résultat incorrect" ?
va hors de la vue.
Tout d'abord, si vous ne AutoLayout de la programmation, je vous le conseille l'utilisation de ce grand Cadre cela rendra votre vie beaucoup plus facile et votre code tellement lisible 😉
Merci pour votre suggestion, je ne veux pas utiliser d'autres classes de ce. s'il vous plait pouvez-vous aider mon œuvre, je suis juste en manque somethong peu.
Voyez-vous des informations à afficher dans la console de débogage lors de la rotation de l'appareil? E. g. Incapable de satisfaire simultanément des contraintes. Habituellement, la console de débogage vous donnera un indice sur le pourquoi de la vue ne s'affichent pas correctement. Vous devez également être le réglage de translatesAutoresizingMaskIntoConstraints = NO sur la sous-vues.

OriginalL'auteur user203108 | 2014-02-21