当我添加约束时,使translatesAutoresizingMaskIntoConstraints为false

时间:2018-12-29 09:14:26

标签: ios swift autolayout swift4

我以编程方式创建视图,并且当我想向视图添加自动布局时,每次都将translatesAutoresizingMaskIntoConstraints设置为false会很痛苦。现在,我正在寻找可以简化生活的解决方案。 每当我想添加约束时,是否有任何扩展或类使其使其禁用?

谢谢。

2 个答案:

答案 0 :(得分:1)

我认为您可以在视图子类中添加该行translatesAutoresizingMaskIntoConstraints。例如,您通常使用UITextField或说UIView,以确保您拥有这样的基类,例如:

import UIKit

/// Another Customized/Subclassed UIButton.
class BaseButton: UIButton {

    /// override init
    override init(frame: CGRect) {
        super.init(frame: frame)

            self.translatesAutoresizingMaskIntoConstraints = false
       }
    }

    /// override coder
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

或者更好,我可以建议下面的这个吗?我将SnapKit用于所有生产级别的项目。

https://github.com/SnapKit/SnapKit

我希望这会有所帮助!

答案 1 :(得分:0)

您可以扩展UIView类的约束,使其适用于所有UIControls和自定义UIViews

extension UIView {
    func anchor(_ anotherView: UIView) {
        anotherView.translatesAutoresizingMaskIntoConstraints = false
        self.addSubview(anotherView)
        anotherView.leftAnchor.constraint(equalTo: self.leftAnchor).isActive = true
        anotherView.topAnchor.constraint(equalTo: self.topAnchor).isActive = true
        anotherView.rightAnchor.constraint(equalTo: self.rightAnchor).isActive = true
        anotherView.bottomAnchor.constraint(equalTo: self.bottomAnchor).isActive = true
    }
}

示例:

func setupView() {
    self.view.anchor(self.someImageView)
}