删除一个视图的布局限制,但保留其子视图'?

时间:2015-07-11 11:43:55

标签: ios objective-c xcode autolayout constraints

使用故事板和自动布局在iOS 8中处理项目:

  1. 在情节提要中,为此视图及其子视图指定了约束
  2. 在代码中,为了响应触摸事件,我将通过设置框架来更改此视图的大小
  3. 要使1和2警告都免费,我首先使用代码更改其大小时执行以下操作:

    [theView removeConstraints:theView.constraints];
    theView.translatesAutoresizingMaskIntoConstraints = YES;
    theView.frame = CGRectMake(0,0,width,height);
    

    如果不做第一行,Xcode会抱怨一大堆约束冲突,但添加这一行也会删除所有子视图的约束。所以我的问题是:有没有办法去除这个uiview的约束而不是它的子视图,比如它上面的一个按钮仍然想要相对于这个视图的大小和位置居中?

1 个答案:

答案 0 :(得分:1)

首先,您不需要通过设置框架来调整视图大小,否则将约束保留在第一位的重点是什么。你可以通过简单地拥有正确的初始框架来获得位置。

其次,你有一个关于" TO-WHOM"已应用约束。

  

说它上面的按钮仍然想要相对于这个视图的大小和位置居中?

将与位置相关的约束应用于视图时,通常会将其应用于superview。表示如果您想将subview放在view的水平中心,则约束会添加到view而不是subview上。这就是为什么当您在视图上调用removeContraints:消息时,位置约束已被删除,现在您的子视图未绑定到任何约束。但是,宽度和高度约束将应用于子视图本身。

要解决此问题,您需要为需要修改的约束设置IBOutlets,在您的情况下应该是宽度,高度,水平x和顶部约束;然后分别更改它们的常量值。

theView.widthConstraint.constant = newValue;