iOS:在设置故事板后编辑视图的约束

时间:2015-01-08 21:33:21

标签: ios objective-c autolayout constraints

美好的一天,朋友们!

我正在开发我的第一个应用程序,我无法解决自动布局的一个问题。 我必须在两个按钮之间设置约束。但它们必须根据显示的分辨率而改变:不是恒定的偏移。

据我所知,我无法在IB中执行此操作,因此我使用以下代码以编程方式构建约束:

[self.view addConstraints:[NSLayoutConstraint
                               constraintsWithVisualFormat:@"H:|-horizontalOffset-[button1(>=102)]-buttonsInterval-[button2(>=102)]-horizontalOffset-|"
                               options:0
                               metrics:metrics
                               views:buttons]];

如果我在代码中创建按钮,但如果在故事板中创建按钮则它不起作用。 我在这里做更新:

- (void)updateViewConstraints
{
    [super updateViewConstraints];
    [self setMyConstraintsForScreen:self.view];
}

但是以前为这个按钮创建的约束总是存在一些冲突 - xcode自己创建它们或者我在IB中手动设置它们。

当我尝试从根视图中删除所有约束时,出现此错误:

'The layout constraints still need update after sending -updateViewConstraints to <ViewController: 0x7ffa6a5497c0>.
ViewController or one of its superclasses may have overridden -updateViewConstraints without calling super or sending -updateConstraints to the view. Or, something may have dirtied layout constraints in the middle of updating them.  Both are programming errors.'

我确实调用了[super updateViewConstraints] ...我也没有将updateViewConstraints发送到任何特定的视图。

有没有人有解决方案? 基本上我需要做一件简单的事情:为故事板中内置的视图设置变量约束。

谢谢!

1 个答案:

答案 0 :(得分:1)

在类(代码)中定义类型为NSLayoutConstraint的IBOutlet,然后在IB中将其与约束定义连接。

然后在您的代码中,您可以更改约束,例如使用

constraint.constant = 123;
[view layoutIfNeeded];