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

时间:2015-02-12 08:11:31

标签: ios iphone xcode

我花了很多时间以编程方式使用约束设置UIButton的位置并用Google搜索相同的内容。但无法得到它。如果我以编程方式按下按钮,它工作正常。

此处按钮在故事板中被视为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

1 个答案:

答案 0 :(得分:0)

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

仅在viewDidAppear的循环中才会添加。如果在viewDidAppear中添加约束,它应该可以工作。

然而,问题是只有在加载视图后才会出现约束。