【问题标题】:iOS: Editing constraints for views after setting them up storyboardiOS:在设置故事板后编辑视图的约束
【发布时间】:2015-01-08 21:33:21
【问题描述】:

朋友们,美好的一天!

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

据我了解,我不能在 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 发送到任何特定视图。

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

谢谢!

【问题讨论】:

  • 不设置两个按钮之间的约束,可以在竖屏模式下将约束设置到屏幕边缘吗?这样,当您旋转到横向时,它们会在纵向模式下分开更远并靠得更近。

标签: ios objective-c autolayout constraints


【解决方案1】:

您在您的类(代码)中定义一个 NSLayoutConstraint 类型的 IBOutlet,然后在 IB 中将它与您的约束定义连接起来。

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

constraint.constant = 123;
[view layoutIfNeeded];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-09
    • 1970-01-01
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 2017-05-28
    • 2017-06-07
    • 1970-01-01
    相关资源
    最近更新 更多