【问题标题】:Manually laid out view in auto layout super view在自动布局超级视图中手动布局视图
【发布时间】:2016-02-05 11:33:10
【问题描述】:

我有一些与自动布局和手动布局混合有关的不那么普通的问题。

  1. view1 - 使用自动布局的超级视图
  2. view2 - 使用手动布局的子视图

view1的高度取决于子视图的总高度。

我为 view2 设置了 translatesAutoresizingMaskIntoConstraints = NOframe 并将其作为子视图添加到 view1view2 的结果高度为 0(在 layoutSubviews 中)

所以 view1 的自动布局在确定自身高度时不会关注 view2 的 高度。然后将这个 0 高度传播到 view2

需要建议。我不确定这是否合法。

【问题讨论】:

  • 您的答案没有发布太多代码,所以我有一些通用的 cmets。您可以混合使用 Interface Builder 创建的视图和以编程方式创建的视图。有几种方法可以做到这一点,但我认为最简单的方法是使用 Visual Format Language。本教程是一个很好的起点。 raywenderlich.com/110393/…
  • 如何使用不同的布局引擎以编程方式创建混合视图?谷歌没有那么多教程:(
  • 不确定这里的代码是否合适,但如果我的描述不够清楚,我可以绘制方案。
  • 正如你所说的superview size equalssubview size,操作系统如何知道SuperView (View1) 和子视图(view2) 之间的依赖关系而不指定自动布局?
  • 超级视图为子视图的顶部/底部/尾部/前沿创建具有 0 个常量的约束。所以它的大小取决于子视图的大小,该大小使用手动布局确定(设置frame

标签: ios autolayout ios-autolayout


【解决方案1】:

在自动布局世界中,视图应该具有明确的约束集。因此,要将使用手动布局创建的视图嵌入使用自动布局创建的视图中,您或 iOS 系统必须为子视图提供相应的约束集。

换句话说:

  • 像往常一样设置translatesAutoresizingMaskIntoConstraints = YES,配置frameautoresizingMask。但请注意,在将自动调整掩码转换为约束(在运行时)期间,超级视图已经具有的约束与操作系统将创建的约束之间可能存在冲突。

  • 设置translatesAutoresizingMaskIntoConstraints = NO并自行添加约束。

嗯,没什么新鲜的。但我不得不花一些时间在脑海中弄清楚,希望它可以节省您的时间!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-10
    • 2013-06-17
    • 1970-01-01
    相关资源
    最近更新 更多