我花了很多时间以编程方式使用约束设置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
答案 0 :(得分:0)
你把上面的代码放在viewDidLoad中吗?我有一个类似的问题。在viewdidload中,故事板中的所有视图都尚未添加到UIViewController的视图中。你可以快速完成self.subviews
的NSLog,你不会在那里看到UIButton。
仅在viewDidAppear的循环中才会添加。如果在viewDidAppear中添加约束,它应该可以工作。
然而,问题是只有在加载视图后才会出现约束。