2017-04-18 6 views
0

私はラベルがあり、コントロール、テキストボックス&の2つのボタンがiOSのビューにあります。 2つのセグメントがあります。セグメント1ではビューはimage1のようになり、セグメント2を選択するとビューはimage2のようになります。iOSのAutolayout

Image 1

Image 2

各セグメントは、それがレイアウトを変更する必要がクリックされるたび。

image最初は出力として取得しますが、次の選択ではレイアウトは変更されません。希望の結果を得るために何をするのですか?

以下はあなたがXIBの要素を追加し、この場合には動作しないことが制約を再生しようとしている私のコード

#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];これをセグメントアクションで呼び出して、 – karthikeyan

+0

を確認してください。ちょっとした提案です。プログラムによる自動レイアウトは使用しないでください。 – phani

+0

PhaniRaghu autolayoutsをプログラムで使用する以外の代替ソリューションはありません – ck1924

答えて

0

です。次のようにしてください。

セグメント制御、ボタン、テキストフィールドなどのすべての要素をプログラミングによって作成し、制約を追加します。

セグメント間を反転すると、前のセグメントが削除され、新しいセグメントの内容が追加されます。

問題がある場合はお知らせください。

関連する問題