【问题标题】:addSubview breaking internal contraintsaddSubview 打破内部约束
【发布时间】:2015-03-11 19:21:23
【问题描述】:

我在动态添加子视图时遇到了一些麻烦。也就是说,当我有一个在界面构建器中内置约束的视图然后使用[view addSubview:subview] 时,它会破坏我设置的所有约束。

我尝试添加[subview setAutoresizingMask:NO];subview.translatesAutoresizingMaskIntoConstraints = false;

我预计子视图对其原始父级的约束会被破坏,并在我调用addSubview 后以编程方式将它们添加回来,但我没想到它的子视图的约束也会被破坏。

不幸的是,重新添加子约束是不可行的。我们使用的架构是插件模型,虽然从主 UIViewController 调整插件容器的大小很简单,但插件需要负责定位其内部元素。

以下是事物外观的模型:

这是它目前的样子:

我怎样才能获得addSubview 来维护这些内部约束?红色、绿色和蓝色框仅相互约束以及它们的父级(紫色),它们都通过addSubview 实现。

【问题讨论】:

  • 当您将 View1 添加为子视图时,您如何定义其大小和位置?你在使用约束吗?如果是这样,您要添加哪些约束?
  • 它的宽度、前导和顶部与它的新父级绑定(宽度相等,其他为 0)。高度是静​​态的。
  • 不应丢失内部约束(我尝试时不会丢失)。您应该将 translatesAutoresizingMaskIntoConstraints 设置为 false,这样就可以了。我认为你必须更明确地说明你有什么约束,所以显示你如何加载和添加这个视图的整个代码,以及你添加的约束。

标签: ios objective-c uiview autolayout


【解决方案1】:

我尝试了太多方法,包括 sizeToFit() 和设置 translatesAutoresizingMaskIntoConstraints 但它不起作用。您应该设置要添加为子视图的自定义视图的宽度,并且应该设置视图的 sizeToFit()。它对我有用:

bigView.sizeToFit()
subView.sizeToFit()
subView.width = screenWidth
bigView.addSubview(subView)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多