如何以编程方式为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
答
你把上面的代码放在viewDidLoad中吗?我有一个类似的问题。在viewdidload中,故事板中的所有视图都尚未添加到UIViewController的视图中。你可以做一个self.subviews
的快速NSLog,你不会在那里看到UIButton。
只有在viewDidAppear的循环中才会添加它。如果你在viewDidAppear中添加约束条件,它应该可以工作。
不过,问题是限制只会在加载视图后出现。
为什么你在故事板和约束条件下编程设置UIButton?在故事板中设置约束是很容易的。 – iOSfleer 2015-02-12 08:39:08
打扰我的愚蠢回答 – kylejm 2015-02-12 08:41:46
我一直在练习自动布局一天。我正在练习并尝试以各种方式进行探索。我已经学会了分别在故事板和编程中设置约束条件。但我坚持以编程方式为IBOutlets设置约束。 – Dev 2015-02-12 08:47:01