【问题标题】:Can't set translatesAutoresizingMaskIntoConstraints无法设置 translatesAutoresizingMaskIntoConstraints
【发布时间】:2014-11-20 19:43:43
【问题描述】:

为了解决与以编程方式将子视图添加到滚动视图相关的自动布局问题,我在整个互联网上遇到了 many 引用,在各种情况下都说要设置 translatesAutoresizingMaskIntoConstraints = YEStranslatesAutoresizingMaskIntoConstraints = NO ,视情况而定。

但是,在 Swift 中,当我键入时:

var view = UIView()
view.translatesAutoresizingMaskIntoConstraints = false

我收到内联错误:Cannot assign to 'translatesAutoresizingMaskIntoConstraints' in 'view'。为什么?因为,当你检查时,你会发现它是一个无参数的函数,而不是一个属性。

我已经通过子类化解决了这个问题,但是为了设置translatesAutoresizingMaskIntoConstraints,必须对我正在处理的每个视图进行子类化是一个很大的不便:

class CardView: UIView {
    override func translatesAutoresizingMaskIntoConstraints() -> Bool {
        return false
    }
}

有没有人知道解决这个问题的方法,或者可以阐明一般互联网委员会告诉您的内容与您在 Swift 中实际可以做什么之间的差异?

【问题讨论】:

  • Swift 2.0 允许您直接设置translatesAutoresizingMaskIntoConstraints。这个问题的答案仍然适用于 Swift 2.0 之前的版本。

标签: ios swift autolayout


【解决方案1】:

translatesAutoresizingMaskIntoConstraints 实际上是 UIView 上的一个方法,而不是一个属性。

该语法之所以有效,是因为 ObjC 也允许您使用点表示法来调用方法(关于属性如何实际自动生成 getter/setter 方法,还有其他完整的讨论)。

使用方法而不是尝试使用来自 ObjC 的属性表示法

view.setTranslatesAutoresizingMaskIntoConstraints(false) 

【讨论】:

  • 有趣的事实:在 NSView 上,这种语法不起作用,您需要使用 view.translatesAutoresizingMaskIntoConstraints = false 代替。这可能是值得关注的。
【解决方案2】:

请改用view.setTranslatesAutoresizingMaskIntoConstraints(false)

【讨论】:

    【解决方案3】:

    斯威夫特 2

    view.translatesAutoresizingMaskIntoConstraints = false

    【讨论】:

      【解决方案4】:

      如果您在代码中创建任何视图,例如文本视图、按钮、标签等。 您需要小心如何向它们添加自动布局约束。原因是 iOS 会为您创建与新视图的大小和位置相匹配的约束,如果您尝试添加自己的约束,这些约束会发生冲突,您的应用会崩溃。

      让我们以 uilabel 为例:

      let titleLabel = UILabel()
      titleLabel.translatesAutoresizingMaskIntoConstraints = false
      

      你的情况也是这样:

      let newView = UIView(frame: CGRectZero)
      addSubview(newView)
      newView.translatesAutoresizingMaskIntoConstraints = false
      

      【讨论】:

        猜你喜欢
        • 2013-06-11
        • 1970-01-01
        • 2018-05-27
        • 2023-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-17
        相关资源
        最近更新 更多