2013-07-10 52 views
2

在视图中我插入一个新的UIButton,因为我一直在使用AutoLayout,我需要获取下面的视图的约束,我将要插入按钮。如何以编程方式获取NSLayoutConstraint,以便我可以删除旧约束,然后创建新约束。感谢名单。如何在UIButton之间以编程方式获取NSLayoutConstraint?

编辑:enter image description here

与裁判图,我需要B1和B2之间插入B3,所以,我需要删除B1和B2之间的已经设定的固定空间约束,并且我需要B3底部连接到B2的顶部和B3的顶部到B1的底部。

+0

您是否确定需要删除约束?你能展示一个关于约束条件的图表/代码吗? – Fogmeister

+0

请检查编辑 – Newbee

+0

酷,好吧,你需要删除。好吧,给我一秒...实际上,现在不能回答。看看从这里链接的github项目虽然http://www.oliverfoggin.com/an-auto-layout-experiment/我做了很多。 – Fogmeister

回答

0

您可以关闭应用于视图的默认约束,如下所示。当您第一次创建按钮编程时,应用下面的代码。

B1.translatesAutoresizingMaskIntoConstraints = NO; 
B2.translatesAutoresizingMaskIntoConstraints = NO; 
B3.translatesAutoresizingMaskIntoConstraints = NO; 

将所有按钮的使用AddSubView您查看后重新设定你的约束与参数你需要下面的例子。

// Center the middle one vertically 
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:B2 attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0]]; 

希望这有助于你我找到最好的答案在堆栈飞越从 Evenly space multiple views within a container view 铝是最好的。

+0

谢谢你的回答,我会检查并让你知道。 – Newbee

+0

尝试了你的代码..新的按钮放置在第二个项目的位置(在你的情况self.view)而不是通过下移第二个按钮。 – Newbee

+0

避免我的示例只是使用translatesAutoresizingMaskIntoConstraints转换默认约束并仅应用您的逻辑 –

2

我需要删除B1和B2

之间已经设定的固定空间限制查找约束编程

您可以在视图中限制搜索B1,或保持对它的引用当您创建它时,请使用NSLayoutConstraint。搜索B1的约束可能效率较低:所有关系约束(查看另一个视图)都是包含superview的一部分。假设你有一个手柄B1,你可以列出所有B1约束它的父像这样:

// Searching all relationship constraints involving b1 
for item in self.view.constraints() { 
    if let constraint = item as? NSLayoutConstraint { 
     if let button = constraint.firstItem as? UIButton { 
      if button == b1 { 
       println("firstItem found: \(constraint)") 
      } 
     } 
     if let button = constraint.secondItem as? UIButton { 
      if button == b1 { 
       println("secondItem found: \(constraint)") 
      } 
     } 
    } 
} 

记住约束

到目前为止,清洁方法是保持到NSLayoutConstraint你想有一个参考以后修改或删除。要在Storyboard中执行此操作,请创建您需要的约束。

enter image description here

然后直接控制拖动参考到您的源文件后操纵它们。

enter image description here