addSubview 打破内部约束
Posted
技术标签:
【中文标题】addSubview 打破内部约束【英文标题】:addSubview breaking internal contraints 【发布时间】:2015-03-11 19:21:23 【问题描述】:我在动态添加子视图时遇到了一些麻烦。也就是说,当我有一个在界面构建器中内置约束的视图然后使用[view addSubview:subview]
时,它会破坏我设置的所有约束。
我尝试添加[subview setAutoresizingMask:NO];
和subview.translatesAutoresizingMaskIntoConstraints = false;
我预计子视图对其原始父级的约束会被破坏,并在我调用addSubview
后以编程方式将它们添加回来,但我没想到它的子视图的约束也会被破坏。
不幸的是,重新添加子约束是不可行的。我们使用的架构是插件模型,虽然从主 UIViewController
调整插件容器的大小很简单,但插件需要负责定位其内部元素。
以下是事物外观的模型:
这是它目前的样子:
我怎样才能获得addSubview
来维护这些内部约束?红色、绿色和蓝色框仅相互约束以及它们的父级(紫色),它们都通过addSubview
实现。
【问题讨论】:
当您将 View1 添加为子视图时,您如何定义其大小和位置?你在使用约束吗?如果是这样,您要添加哪些约束? 它的宽度、前导和顶部与它的新父级绑定(宽度相等,其他为 0)。高度是静态的。 不应丢失内部约束(我尝试时不会丢失)。您应该将 translatesAutoresizingMaskIntoConstraints 设置为 false,这样就可以了。我认为你必须更明确地说明你有什么约束,所以显示你如何加载和添加这个视图的整个代码,以及你添加的约束。 【参考方案1】:我尝试了太多方法,包括 sizeToFit() 和设置 translatesAutoresizingMaskIntoConstraints 但它不起作用。您应该设置要添加为子视图的自定义视图的宽度,并且应该设置视图的 sizeToFit()。它对我有用:
bigView.sizeToFit()
subView.sizeToFit()
subView.width = screenWidth
bigView.addSubview(subView)
【讨论】:
以上是关于addSubview 打破内部约束的主要内容,如果未能解决你的问题,请参考以下文章