Ios 自动布局哑巴(我的)?

Ios 自动布局哑巴(我的)?,ios,autolayout,Ios,Autolayout,我在我的一个项目中使用自动布局,我认为这是一项琐碎的任务,但遇到了麻烦 作为一个例子,我有两个文本框相互下方。我已经在两个点之间创建了一个垂直间距约束,共5个点 我希望如果我移动顶部文本框(使用setFrame),约束将意味着底部文本框将自动移动以强制执行约束 我的想法正确吗?或者我使用自动布局的方式不是故意的。我误解了它的目的。或者我应该使用与setFrame不同的方式移动顶部文本框吗 任何意见都会很好。提前感谢:-) 另外,我已经尝试过使用:setTranslatesAutoresizing

我在我的一个项目中使用自动布局,我认为这是一项琐碎的任务,但遇到了麻烦

作为一个例子,我有两个文本框相互下方。我已经在两个点之间创建了一个垂直间距约束,共5个点

我希望如果我移动顶部文本框(使用setFrame),约束将意味着底部文本框将自动移动以强制执行约束

我的想法正确吗?或者我使用自动布局的方式不是故意的。我误解了它的目的。或者我应该使用与setFrame不同的方式移动顶部文本框吗

任何意见都会很好。提前感谢:-)


另外,我已经尝试过使用:setTranslatesAutoresizingMaskIntoConstraints,这似乎很有效。然而,这似乎不是正确的方法。我最初的想法是,自动布局应该用很少的代码来处理大小/位置关系,在这种情况下,我希望它可以用零代码来处理。

您不能使用setFrame来实现这一点。自动布局决定框架。如果在约束未自动更新之后更改它

您可以获得一个约束的引用,该约束决定了顶框的Y位置(无论是在以编程方式创建它时还是在使用IBOutlet时),并更改其值。这将触发更新以重新计算所有内容的位置并再次运行布局

您可以通过更改NSLayoutConstraint对象的constant属性的值来实现这一点


我有点像iOS新手,但我不认为autolayout尊重随时间变化的关系。我认为这是一次性的(初始布局)。所以,是的,听起来你好像在攻击它。可能是错的,但是…@Brendanhanemann是的,它尊重随时间变化的关系。无论何时调用“setNeedsLayout”,它都会重新计算位置的位置。但是,混合使用用户指定的布局(setFrame:)和自动布局会导致灾难。对这两个框都使用用户指定的布局(覆盖布局子视图并计算两个框的位置),或者对这两个框都使用用户自动布局,也可以对顶部文本框使用用户自动布局。@fishinear啊,好的,很高兴知道。但也可能这个家伙还需要调用该方法(
setNeedsLayout
)?@BrendanHannemann setNeedsLayout在所有情况下都会被自动调用,在这些情况下,iOS可以看到某些内容发生了更改(例如superview大小的更改)。通常,在手动布局时,您只需要调用setNeedsLayout,并且希望显式移动/调整视图大小。为此使用和操作约束的问题是,我希望第一个控件下面的控件相对于第一个文本框的高度移动。文本框只是一个例子,我有一个集合视图控件,下面有控件。随着collectionview内容的更改,其高度也会更改,因此所有项目始终可见。我希望集合视图下方的控件相对于集合视图的高度向下移动。不确定是否可以通过引用约束来执行此操作-因为我不确定要为约束指定什么值?如果要以编程方式控制集合视图的高度,请在控件上设置高度约束,并将该约束的常量属性更改为您计算的值。但是,听起来好像您正试图将页脚放在集合视图上。这是一个不同的场景,因为您确实在尝试将某些内容放置在最后一个单元格下方,而不是视图本身下方。这是真的吗?不,不是一个页脚。只是一堆需要显示在集合下面的其他控件。不过,您的评论给了我一个线索,按照建议,我将尝试为集合创建高度约束,并在运行时对其进行更改。我猜自动布局将以这种方式更有效地使用,而不是使用我上面提到的“setTranslates…”方法。