如何使用具有自动布局的init(frame :)实例化自定义UIView子类?

时间:2019-01-24 13:57:52

标签: ios swift autolayout

我正在制作ios应用,并且依靠AutoLayout约束来设置视图和子视图布局的大小。

我制作了UIScrollView的自定义子类,请参见下文。当我编写其init方法时,我看到它的超类只有init(frame:)被覆盖。但是因为我使用的是自动布局,所以我不应该设置框架。

那么我该如何编写init方法呢?我应该传入一个虚拟的frame值吗?

MyCollectionView: UIScrollView {

   init() {
        super.init(CGRect(x:0, y:0, width:0, height:0))
    }

}

用法:

ViewController:UIViewController {

let myScrollView = MyScrollView()

}

1 个答案:

答案 0 :(得分:1)

当您使用自动启动时,您不必担心设置/不用框架

let myScrollView = MyScrollView()
myScrollView.translatesAutoresizingMaskIntoConstraints = false

translatesAutoresizingMaskIntoConstraints设置为false时,框架将无效,

class MyScrollView: UIScrollView {

    override init(frame: CGRect) {
        super.init(frame: frame)
        setUp()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
         setUp()
    }

    func setUp() {

    }

}

let gg = MyScrollView(frame: .zero)
gg.translatesAutoresizingMaskIntoConstraints = false
// add constraints