如果我创建标准的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)
我不想指定宽度和高度约束,只是让边缘确定视图的大小。
可以这样做吗?
答案 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)
不。您无需手动指定框架。只需确保视图具有宽度和高度大小限制。