【问题标题】:Cant fill superview with view programmatically无法以编程方式用视图填充超级视图
【发布时间】:2014-12-29 15:20:59
【问题描述】:

我会尽量让 subview 的尺寸和 superview 一样。

override func viewDidLayoutSubviews() {
    subView.setTranslatesAutoresizingMaskIntoConstraints(true)
    let viewsDictionary = ["subView": subView]

    view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[subView]|", options: nil, metrics: nil, views: viewsDictionary))
    view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[subView]|", options: nil, metrics: nil, views: viewsDictionary))
}

我做错了什么?

===========================

更新!

subView.setTranslatesAutoresizingMaskIntoConstraints(false)
        let viewsDictionary = ["subView": subView]

        view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-0.0-[subView]-0.0-|", options: nil, metrics: nil, views: viewsDictionary))
        view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-0.0-[subView]-0.0-|", options: nil, metrics: nil, views: viewsDictionary))
    }

但是没有效果=(

非常感谢!

【问题讨论】:

    标签: ios xcode swift autolayout


    【解决方案1】:

    两个错误(至少)。第一:

    subView.setTranslatesAutoresizingMaskIntoConstraints(true)
    

    那必须是false,而不是true

    第二:您不想简单地在 viewDidLayoutSubviews 中执行此操作,因为该方法将在您的应用程序的生命周期中被多次调用,并且您每次都将无条件地添加新的约束。

    【讨论】:

    • 嗯,这就是我说“至少”的原因。你说“没有效果”,但我怎么知道这些变量甚至是正确的变量?例如,subView 实际上是指向该视图的指针吗?或者它的superview是正确的superview?不过,我知道,如果一切都指向正确的事情,那么这种代码工作;例如,看看这段代码,我在代码中创建了一个滚动视图,并给它提供了与它的超级视图完全重叠的约束:github.com/mattneub/Programming-iOS-Book-Examples/blob/master/…
    • 非常感谢,您的代码工作正常,您能回答另一个问题吗?我将您的代码从“H:|-(10)-[lab]”更改为“H:|-(0)-[lab]-(0)-|”,但标签宽度不等于 sc 宽度,告诉我,请,它是如何工作的,以及我需要学习什么来理解自动布局,再次感谢!
    • 如果我的回答对您有帮助,请采纳(勾选)。如果这导致一个新问题,请提出一个新问题;不要使用 cmets 将一个问题“偷偷”到另一个问题上。
    猜你喜欢
    • 2016-09-09
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    相关资源
    最近更新 更多