iOS中的Autolayout编程式

问题描述:

我有一个标签,segemented控件,文本框& iOS中视图中的2个按钮。 有2个部分。在段1上,视图应该看起来像image1,而在选择段2时,视图应该看起来像是image2。iOS中的Autolayout编程式

Image 1

Image 2

每次各个段被点击它应该改变布局。

图片一是我得到的输出最初,但在下一次选择,它不会改变布局。我做了什么来克服期望的结果。

下面是我的代码

#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什么是替代解决方案,除了以编程方式使用自动布局 – ck1924

您已经添加在厦门国际银行的元素,并试图与可能无法在这种情况下,工作的限制发挥。最好尝试以下操作。

通过编程创建像段控制,按钮,文本字段等所有元素,然后添加约束。

当在片段之间翻转时,删除以前的片段并添加新的片段内容。

让我知道你是否有任何问题。