自定义UIView以编程方式使用约束

时间:2015-03-22 23:53:00

标签: swift uiview autolayout constraints

如果我创建标准的UIView let aView = UIView()并以编程方式为其添加约束,则视图将显示在屏幕上。

但是,如果我创建一个继承自UIView class CustomView: UIView的自定义视图,然后实例化此视图let aView = CustomView()并向其添加约束,则视图不会出现在屏幕上。 但是,如果我添加使用框架let aView = CustomView(frame: CGRectMake(0,0,100,100))实例化自定义视图,则会显示自定义视图。

您是否必须为自定义视图提供框架才能在屏幕上显示?

更新

我的约束是

let leftConstraint: NSLayoutConstraint = NSLayoutConstraint(item: aView, attribute: NSLayoutAttribute.Left, relatedBy: NSLayoutRelation.Equal, toItem: self, attribute: NSLayoutAttribute.Left, multiplier: 1.0, constant: 50)

let topConstraint: NSLayoutConstraint = NSLayoutConstraint(item: aView, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: self, attribute: NSLayoutAttribute.Top, multiplier: 1.0, constant: 0)

let rightConstraint: NSLayoutConstraint = NSLayoutConstraint(item: aView, attribute: NSLayoutAttribute.Right, relatedBy: NSLayoutRelation.Equal, toItem: self, attribute: NSLayoutAttribute.Right, multiplier: 1.0, constant: 0)

let bottomConstraint: NSLayoutConstraint = NSLayoutConstraint(item: aView, attribute: NSLayoutAttribute.Bottom, relatedBy: NSLayoutRelation.Equal, toItem: self, attribute: NSLayoutAttribute.Bottom, multiplier: 1.0, constant: 20)

我不想指定宽度和高度约束,只是让边缘确定视图的大小。

可以这样做吗?

1 个答案:

答案 0 :(得分:1)

我假设你在谈论编程约束:

确保您的UIView具有以下限制:

水平定位约束 垂直定位约束

水平尺寸约束(宽度) 垂直尺寸约束(高度)

如果没有宽度和高度约束,则会绘制视图。但它的高度为0,宽度为0,因此您将无法看到它。

这是一个例子。

        // dictionary for views
    let viewsDictionary = [     "aView": aView]
    // dictionary for metrics
    let metricsDictionary = [   "ViewHeight":90]

// this places your UIVIew 16 points from the left, and makes it take up the rest of the space to the right. (until your self.view ends)
self.view.addConstraints(
            NSLayoutConstraint.constraintsWithVisualFormat(
                "H:|-16-[aView]|", options: nil, metrics: nil, views: viewsDictionary))

// This constraint places it 32 points from the top. And gives it a height of 90
self.view.addConstraints(
            NSLayoutConstraint.constraintsWithVisualFormat(
                "V:|-32-[aView(viewHeight)]", options: nil, metrics: metricsDictionary,
                views: viewsDictionary))

并确保为您的UIView禁用autoLayout。

在将其添加为子视图之前,请添加以下行:

aView.setTranslatesAutoresizingMaskIntoConstraints(false)

不。您无需手动指定框架。只需确保视图具有宽度和高度大小限制。