【问题标题】:sizeThatFits on view with constraints (auto layout view inside frame layout view)sizeThatFits 在带有约束的视图上(框架布局视图内的自动布局视图)
【发布时间】:2016-11-20 21:32:58
【问题描述】:

View A 通过在 layoutSubviews 中计算和设置它们的框架来布局它的子视图。

视图 B 使用约束来布局它的子视图。

视图 A 包含许多视图 B 实例。

视图 A 在布局子视图时需要知道其子视图的大小,因此它会在它们上调用sizeThatFits:

视图 B 的高度取决于它的宽度。在我的示例中,它内部有一个多行 UILabel

B 应该如何实现它的sizeThatFits:,以便它返回正确的大小,同时考虑传递给sizeThatFits:size 参数和考虑到的约束?

到目前为止我尝试过/考虑过的事情:

systemLayoutSizeFittingSize: - 不起作用,因为它没有考虑传递给它的确切大小。它不能用于指定精确的宽度,例如水平收缩时垂直增长的视图。它只给出最压缩的大小或最扩展的大小。

intrinsicContentSize- 据我从文档中了解,这用于传递信息自动布局。我们想要的是自动布局获取信息。

到目前为止,这就是我的推理方式。如果我犯了错误,请纠正我。请帮助我,如果有人能指出我是如何做到的,我将不胜感激!

编辑:另外,也许有一些完全不同的方法可以做到这一点,甚至不使用sizeThatFits:?我唯一的要求是我可以继续在“外部”视图(视图 A)中使用框架布局和在“内部视图”(视图 B)中使用自动布局。

edit2:添加了一张图片来说明我必须解决的确切情况

edit3:忘了说,我需要支持iOS 7.0

【问题讨论】:

  • 为什么不设置约束将视图 B 链接到视图 A,并将视图 A 的垂直内容拥抱优先级更改为低?
  • 另外,如果您选择这种方式,请确保您的所有 B 视图都具有将所有视图链接在一起的顶部和底部约束,以便视图 A 知道如何调整大小;)
  • 但这将在视图 A 中使用自动布局,我想知道如何在视图 A 中使用代码(框架布局)任意定位视图,同时在视图 B 中使用约束. 当然,图片中的布局用自动布局很容易实现,但是有时候布局不能用约束来表达,我想学习一下这种情况是怎么做的。
  • 我在您所说明的布局中没有看到任何无法在约束中表达的内容。
  • 是的,这是真的,但是,我想学习如何在布局无法仅用约束表达的情况下做到这一点

标签: ios autolayout uikit


【解决方案1】:

从图片看来,UIStackView 可能是 View A 的更好方法?

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIStackView_Class_Reference/

然后只用一个边距约束,将 View A UIStackView 的底部偏移到最后一个 View B 的底部

【讨论】:

  • UIStackView 在 iOS 9.0 之前不可用
  • 抱歉,我在问题中从未说过我需要支持 iOS 7.0。但实际上,即使它不起作用,我也希望能够在视图 A 中将框架设置为我想要的任何内容,而 UIStackView 不允许我将框架设置为我想要的任何内容。
【解决方案2】:

我会使用自动布局。您仍然可以指定确切的大小和位置,只需使用约束而不是框架。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-09
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多