如何以编程方式为IBOutlet设置约束?

问题描述:

我试了很多时间用编程方式使用约束来设置UIButton的位置,并用相同的方法进行搜索。但无法得到它。如果我以编程方式进行按钮,它工作正常。如何以编程方式为IBOutlet设置约束?

这里按钮被视为故事板中的IBOutlet。

这里是我的代码

[btnBack setTranslatesAutoresizingMaskIntoConstraints:NO]; 

NSDictionary *dictViews = @{@"btnBack" : btnBack}; 

NSArray *arr_WIDTH_btnBack = [NSLayoutConstraint constraintsWithVisualFormat:@"H:[btnBack(46)]" options:0 metrics:nil views:dictViews]; 
NSArray *arr_HEIGHT_btnBack = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[btnBack(30)]" options:0 metrics:nil views:dictViews]; 
[btnBack addConstraints:arr_WIDTH_btnBack]; 
[btnBack addConstraints:arr_HEIGHT_btnBack]; 

NSArray *arr_POS_btnBack_H = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-16-[btnBack]" options:0 metrics:nil views:dictViews]; 
NSArray *arr_POS_btnBack_V = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-31-[btnBack]" options:0 metrics:nil views:dictViews]; 
[self.view addConstraints:arr_POS_btnBack_H]; 
[self.view addConstraints:arr_POS_btnBack_V]; 

我得到的错误 -

终止应用程序由于未捕获的异常“NSInvalidArgumentException”,理由是:“无法解析约束格式: 无法解释‘|’字符,因为相关视图没有超级视图H:| -16- [btnBack]

我不知道我犯的错误在哪里。我错过了什么吗?

TIA

+0

为什么你在故事板和约束条件下编程设置UIButton?在故事板中设置约束是很容易的。 – iOSfleer 2015-02-12 08:39:08

+0

打扰我的愚蠢回答 – kylejm 2015-02-12 08:41:46

+1

我一直在练习自动布局一天。我正在练习并尝试以各种方式进行探索。我已经学会了分别在故事板和编程中设置约束条件。但我坚持以编程方式为IBOutlets设置约束。 – Dev 2015-02-12 08:47:01

你把上面的代码放在viewDidLoad中吗?我有一个类似的问题。在viewdidload中,故事板中的所有视图都尚未添加到UIViewController的视图中。你可以做一个self.subviews的快速NSLog,你不会在那里看到UIButton。

只有在viewDidAppear的循环中才会添加它。如果你在viewDidAppear中添加约束条件,它应该可以工作。

不过,问题是限制只会在加载视图后出现。