2017-04-18 1 views
0

J'ai une étiquette, segmented Control, zone de texte & 2 boutons dans une vue dans iOS. Il y a 2 segments. Sur le segment 1, la vue devrait ressembler à image1, Et à la sélection du segment 2, la vue devrait ressembler à image2.Autolayout dans iOS Programatically

Image 1

Image 2

Chaque fois que les segments respectifs sont cliqués il faut changer la mise en page.

l'image est ce que je reçois en sortie initialement, mais lors de la prochaine sélection, elle ne change pas de disposition. Quel dio je fais pour obtenir les résultats souhaités.

Ci-dessous est mon code

#import "ViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    self.textview.hidden = true; 
    self.btnSMSOut.translatesAutoresizingMaskIntoConstraints = NO; 
    self.btnCallOut.translatesAutoresizingMaskIntoConstraints = NO; 
} 


- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 


- (IBAction)segementA:(id)sender { 

    if (self.segmentOutput.selectedSegmentIndex == 0) { 

     [self.btnSMSOut removeConstraints: [self.btnSMSOut constraints]]; 
     [self.btnCallOut removeConstraints: [self.btnCallOut constraints]]; 

     self.textview.hidden = true; 
     self.btnCallOut.hidden = false; 


     [self view1]; 

    } 
    else { 

     [self.btnSMSOut removeConstraints: [self.btnSMSOut constraints]]; 
     [self.btnCallOut removeConstraints: [self.btnCallOut constraints]]; 

     self.textview.hidden = false; 
     self.btnCallOut.hidden = true; 
     [self view2]; 
    } 
} 

- (void)view2 
{ 
    NSLog(@"function view 1"); 

    NSDictionary *viewsDictionary = @{@"btnSMS":self.btnSMSOut}; 

    NSArray *constraint_H = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[btnSMS(30)]" options:0 metrics:nil views:viewsDictionary]; 

    NSArray *constraint_V = [NSLayoutConstraint constraintsWithVisualFormat:@"H:[btnSMS(288)]" options:0 metrics:nil views:viewsDictionary]; 

    [self.btnSMSOut addConstraints:constraint_H]; 
    [self.btnSMSOut addConstraints:constraint_V]; 





    NSArray *constraint_VPOS = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-343-[btnSMS]" options:0 metrics:nil views:viewsDictionary]; 

    NSArray *constraint_HPOS = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-15-[btnSMS]" options:0 metrics:nil views:viewsDictionary]; 

    [self.view addConstraints:constraint_HPOS]; 
    [self.view addConstraints:constraint_VPOS]; 

} 

- (void)view1 
{ 
    NSLog(@"function view 2"); 

    NSDictionary *viewsDictionary2 = @{@"btnCall":self.btnCallOut, @"btnSMS":self.btnSMSOut}; 

    NSArray *constraint_H = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[btnCall(30)]" options:0 metrics:nil views:viewsDictionary2]; 

    NSArray *constraint_V = [NSLayoutConstraint constraintsWithVisualFormat:@"H:[btnCall(115)]" options:0 metrics:nil views:viewsDictionary2]; 

    [self.btnCallOut addConstraints:constraint_H]; 
    [self.btnCallOut addConstraints:constraint_V]; 

    NSArray *constraint_VPOS = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-380-[btnSMS]" options:0 metrics:nil views:viewsDictionary2]; 

    NSArray *constraint_HPOS = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-145-[btnSMS]" options:0 metrics:nil views:viewsDictionary2]; 

    [self.view addConstraints:constraint_HPOS]; 
    [self.view addConstraints:constraint_VPOS]; 

    NSArray *constraint_H1 = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[btnSMS(30)]" options:0 metrics:nil views:viewsDictionary2]; 

    NSArray *constraint_V1 = [NSLayoutConstraint constraintsWithVisualFormat:@"H:[btnSMS(115)]" options:0 metrics:nil views:viewsDictionary2]; 

    [self.btnSMSOut addConstraints:constraint_H1]; 
    [self.btnSMSOut addConstraints:constraint_V1]; 


    NSArray *constraint_VPOSC = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-380-[btnCall]" options:0 metrics:nil views:viewsDictionary2]; 

    NSArray *constraint_HPOSC = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-145-[btnCall]" options:0 metrics:nil views:viewsDictionary2]; 

    [self.view addConstraints:constraint_HPOSC]; 
    [self.view addConstraints:constraint_VPOSC]; 

} 
+0

[self.view layoutIfNeeded]; appelez ceci dans l'action du segment et vérifiez – karthikeyan

+0

C'est juste une suggestion, n'utilisez pas les mises en page automatiques par programme. – phani

+0

PhaniRaghu Quelles sont les solutions alternatives, autres que l'utilisation automatique des bannières automatiques – ck1924

Répondre

0

Vous avez ajouté les éléments et xib essayant de jouer avec des contraintes qui ne fonctionne pas dans ce cas. mieux essayer de faire ce qui suit.

Créez tous les éléments comme le contrôle de segment, les boutons, les champs de texte par programmation, puis ajoutez des contraintes.

Lorsque vous basculez entre les segments, supprimez le segment précédent et ajoutez le nouveau contenu de segment. Informez-moi si vous avez des problèmes.