向ViewController辅助UIView添加约束

时间:2017-03-31 06:21:02

标签: objective-c swift xcode io autolayout

我有一个Storyboard设置,其中包含一个使用辅助UIView的对话框(屏幕截图中为黄色。)这是通过在故事板上的First Responder和Exit之间将对象库中的UIView向上拖动来完成的。

我无法弄清楚如何相对于superview向这个辅助UIView添加基本约束。右键单击并拖动将不允许我应用约束。这可能吗?我是否需要以编程方式处理所有Autolayout / constraints?

我只需要添加前导/尾随的约束。高度将被修复,但可能会根据屏幕尺寸进行相应调整。

Secondary view.

1 个答案:

答案 0 :(得分:0)

这已被弄清楚了。您无法使用右键单击&在这些视图上拖动IB中的约束。为什么??因为它们还不是视图层次结构的一部分! (傻我......)

在上面的黄色辅助视图示例中,以下是使用VFL(可视格式语言)对其应用自动布局的方法。

在ViewDidLoad中,您首先要关闭视图自动调整大小掩码:

self.yellowSecondaryView.translatesAutoresizingMaskIntoConstraints = false

现在找到您要添加子视图的位置。假设您使用按钮操作来触发它...在该操作中,首先添加视图(1),然后添加约束(2):

// 1
view.addSubview(yellowSecondaryView)

// Create a string representation of the view to use it with VFL.
let viewsDictionary: [String: UIView] = ["yellowSecondaryView": yellowSecondaryView]

//2
view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-50-[yellowSecondaryView]-50-|", options: [], metrics: nil, views: viewsDictionary))  // Width of yellow view will be full width, minus 50 points from the LEFT and the RIGHT of the superview (|)
view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:[yellowSecondaryView(250)]", options: [], metrics: nil, views: viewsDictionary)) // Set a static height of 250 for the yellow view

view.addConstraint(NSLayoutConstraint(item: yellowSecondaryView, attribute: .centerY, relatedBy: NSLayoutRelation(rawValue: 0)!, toItem: view, attribute: .centerY, multiplier: 1, constant: 0))  // Center the view vertically in the superview. (credit to @rdelmar in this thread: http://stackoverflow.com/questions/21494039/using-autolayout-in-ib-how-do-i-position-a-uiview-in-the-center-of-the-screen-pr/21494707#21494707)

希望这有助于有人创建一个更易于管理和组织的故事板! :)