我遇到autolayout问题。
我有三种不同的观点(也可以是n种观点)。当我把第一个固定到超级视图顶部并将一个连接到另一个旁边时,一切似乎都很好。但是如果我想改变第一个的高度,则其他两个不跟随(它们保持在相同的位置)。我觉得奇怪的是,如果我只连接两个视图就可以完美地运行。
为了更好地理解我想要实现的目标,我用三个视图制作了简单的示例解决方案:
http://i.stack.imgur.com/cMwiB.png
所以,当我将绿色视图的高度设置为0(也可以是任何其他数字)并且只连接红色视图时,这样可以正常工作,红色将按原样移动。蓝色没有连接,它仍然保持原样:
这是我将蓝色连接到红色时的屏幕截图:
我试图做的事情:
我想知道的是:
提前致谢。
答案 0 :(得分:1)
好吧,我想你在我前一段时间调查autolayout时陷入了同样的陷阱。这很难解释,但我会尽我所能。使用自动布局时,您需要完全忘记设置视图的框架。而且,我的朋友,包括改变大小和位置。当您使用autolayout时,您可以定义一些约束,一些“规则”,视图在渲染屏幕时会尝试遵守这些约束,因此规则越具体,视图行为的随机性就越小。我的意思是,如果你只是定义视图之间的间距,那么你暗示视图的高度并不重要,所以当调用重新布局时,有些视图可能会增大或缩小(也就是说,如果你没有不要指定大小的约束。您可能希望始终在每个布局中指定一些视图的大小......)
顺便说一句,在调用重新布局之后,允许通过手动更改元素的框架来违反约束,但是当再次调用重新布局方法时,将强制约束,因此大小并且观点的定位将会改变。快速提示:强制重新布局方法的一种简单方法是更改方向(在模拟器中命令+左/命令+右)。
所以在说完之后,我必须说你提供的布局完全按照预期工作,至少对我而言。更改方向时,始终遵守您指定的约束。如果需要,可以尝试在viewDidAppear方法中应用一些框架设置,因为在自动布局之后调用此框架(因此,您可以暂时违反约束)。执行此操作后,您的视图将被破坏,但一旦您更改了方向,就应该再次遵守约束。确保就是这样。
从这里我只能祝你好运;)哦,并参考文档,当我半年前看到这个时,它对我来说是一个救生员。 https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/AutolayoutPG/Introduction/Introduction.html这看起来很经典,但这是一个非常好的文档。
编辑:最后一件事。我的印象是约束不是动态的。你定义它们一次,它们总是在那里。它们的主要目的是确保子视图在每个屏幕分辨率中按预期呈现,因此如果我要创建具有移动视图的应用程序,我会将它们留在自动布局之外,或者完全避免使用它。仅仅是个人印象:))