iOS中的Autolayout编程式
问题描述:
我有一个标签,segemented控件,文本框& iOS中视图中的2个按钮。 有2个部分。在段1上,视图应该看起来像image1,而在选择段2时,视图应该看起来像是image2。iOS中的Autolayout编程式
每次各个段被点击它应该改变布局。
图片一是我得到的输出最初,但在下一次选择,它不会改变布局。我做了什么来克服期望的结果。
下面是我的代码
#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];
}
答
您已经添加在厦门国际银行的元素,并试图与可能无法在这种情况下,工作的限制发挥。最好尝试以下操作。
通过编程创建像段控制,按钮,文本字段等所有元素,然后添加约束。
当在片段之间翻转时,删除以前的片段并添加新的片段内容。
让我知道你是否有任何问题。
[self.view layoutIfNeeded];在段操作中调用它并检查 – karthikeyan
它只是一个建议,不要以编程方式使用自动布局。 – phani
PhaniRaghu什么是替代解决方案,除了以编程方式使用自动布局 – ck1924